From 840a891500eb923566be0b284193711c3c0d57bf Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Sat, 5 Oct 2024 23:56:58 +0000 Subject: [PATCH] build based on 2e5b172 --- dev/404.html | 4 +- dev/api.html | 39 +++++++++---------- ...{api.md.DehzNRDj.js => api.md.Dxqu1QHi.js} | 29 +++++++------- ...hzNRDj.lean.js => api.md.Dxqu1QHi.lean.js} | 29 +++++++------- .../{app.DWRAVX01.js => app.XWT9iCUG.js} | 2 +- .../chunks/@localSearchIndexroot.BIq-6JjD.js | 1 - .../chunks/@localSearchIndexroot.DkOCJlzL.js | 1 + ...9Crzas.js => VPLocalSearchBox.lx_FSht0.js} | 2 +- dev/assets/chunks/framework.BvdfcH24.js | 18 --------- dev/assets/chunks/framework.DT0TDSCa.js | 18 +++++++++ .../{theme._B5YJXUN.js => theme.Db56iT4S.js} | 4 +- ...r.md.CFpyQib2.js => docker.md.CeXB9QeU.js} | 2 +- ...ib2.lean.js => docker.md.CeXB9QeU.lean.js} | 2 +- ...PY1d.js => getting_started.md.ArdKq2gR.js} | 2 +- ...js => getting_started.md.ArdKq2gR.lean.js} | 2 +- ...ex.md.kAlQC9BQ.js => index.md.CBMAENFQ.js} | 2 +- ...C9BQ.lean.js => index.md.CBMAENFQ.lean.js} | 2 +- dev/docker.html | 10 ++--- dev/getting_started.html | 10 ++--- dev/hashmap.json | 2 +- dev/index.html | 10 ++--- 21 files changed, 94 insertions(+), 97 deletions(-) rename dev/assets/{api.md.DehzNRDj.js => api.md.Dxqu1QHi.js} (69%) rename dev/assets/{api.md.DehzNRDj.lean.js => api.md.Dxqu1QHi.lean.js} (69%) rename dev/assets/{app.DWRAVX01.js => app.XWT9iCUG.js} (90%) delete mode 100644 dev/assets/chunks/@localSearchIndexroot.BIq-6JjD.js create mode 100644 dev/assets/chunks/@localSearchIndexroot.DkOCJlzL.js rename dev/assets/chunks/{VPLocalSearchBox.BO9Crzas.js => VPLocalSearchBox.lx_FSht0.js} (99%) delete mode 100644 dev/assets/chunks/framework.BvdfcH24.js create mode 100644 dev/assets/chunks/framework.DT0TDSCa.js rename dev/assets/chunks/{theme._B5YJXUN.js => theme.Db56iT4S.js} (99%) rename dev/assets/{docker.md.CFpyQib2.js => docker.md.CeXB9QeU.js} (98%) rename dev/assets/{docker.md.CFpyQib2.lean.js => docker.md.CeXB9QeU.lean.js} (98%) rename dev/assets/{getting_started.md.DKqyPY1d.js => getting_started.md.ArdKq2gR.js} (99%) rename dev/assets/{getting_started.md.DKqyPY1d.lean.js => getting_started.md.ArdKq2gR.lean.js} (99%) rename dev/assets/{index.md.kAlQC9BQ.js => index.md.CBMAENFQ.js} (90%) rename dev/assets/{index.md.kAlQC9BQ.lean.js => index.md.CBMAENFQ.lean.js} (90%) diff --git a/dev/404.html b/dev/404.html index b6924e3..cb12e9e 100644 --- a/dev/404.html +++ b/dev/404.html @@ -8,14 +8,14 @@ - +
- + \ No newline at end of file diff --git a/dev/api.html b/dev/api.html index 2604fd6..575e3d2 100644 --- a/dev/api.html +++ b/dev/api.html @@ -8,18 +8,18 @@ - + - - - + + + -
Skip to content

API

ReefGuideAPI._cache_location Method
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

ReefGuideAPI._lon_lat_to_tile Method
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

ReefGuideAPI._tile_bounds Method
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

ReefGuideAPI._tile_to_lon_lat Method
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

ReefGuideAPI.apply_criteria_thresholds Method
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
+    
Skip to content

API

ReefGuideAPI._cache_location Method
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

ReefGuideAPI._lon_lat_to_tile Method
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

ReefGuideAPI._tile_bounds Method
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

ReefGuideAPI._tile_to_lon_lat Method
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

ReefGuideAPI.adjusted_nearest Method
julia
adjusted_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach attempts to account for planetary curvature while still maintaining some performance.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (long, lat).

Returns

Matrix with the resampled data.

source

ReefGuideAPI.apply_criteria_thresholds Method
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
 apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Dict)::Raster
-apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

ReefGuideAPI.assess_reef_site Method
julia
assess_reef_site(
+apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

ReefGuideAPI.assess_reef_site Method
julia
assess_reef_site(
     rel_pix::DataFrame,
     geom::GI.Wrappers.Polygon,
     max_count::Float64,
@@ -28,20 +28,20 @@
     start_rot::Float64=0.0,
     n_per_side::Int64=2,
     surr_threshold::Float64=0.33
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

ReefGuideAPI.assess_reef_site Method
julia
assess_reef_site(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

ReefGuideAPI.assess_reef_site Method
julia
assess_reef_site(
     rst::Union{Raster,RasterStack},
     geom::GI.Wrappers.Polygon,
     ruleset::Dict{Symbol,Function};
     degree_step::Float64=15.0,
     start_rot::Float64=0.0,
     n_per_side::Int64=1
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

ReefGuideAPI.closest_reef_edge Method
julia
closest_reef_edge(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

ReefGuideAPI.closest_reef_edge Method
julia
closest_reef_edge(
     pixel::GeometryBasics.Point{2, Float64},
     reef_lines::Vector{GeometryBasics.Line{2, Float64}}
-)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

ReefGuideAPI.create_bbox Method
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

ReefGuideAPI.criteria_middleware Method
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

ReefGuideAPI.degrees_to_meters Method
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

ReefGuideAPI.filter_distances Method
julia
filter_distances(
+)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

ReefGuideAPI.create_bbox Method
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

ReefGuideAPI.criteria_middleware Method
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

ReefGuideAPI.degrees_to_meters Method
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

ReefGuideAPI.filter_distances Method
julia
filter_distances(
     target_rast::Raster,
     dist_buffer
-)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

ReefGuideAPI.filter_far_polygons Method
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

ReefGuideAPI.filter_sites Method
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

ReefGuideAPI.find_horizontal Method
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

ReefGuideAPI.from_zero Method
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

ReefGuideAPI.generate_criteria_mask! Method
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

ReefGuideAPI.get_points Method
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

ReefGuideAPI.identify_potential_sites_edges Method
julia
identify_potential_sites_edges(
+)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

ReefGuideAPI.filter_far_polygons Method
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

ReefGuideAPI.filter_sites Method
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

ReefGuideAPI.find_horizontal Method
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

ReefGuideAPI.from_zero Method
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

ReefGuideAPI.generate_criteria_mask! Method
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

ReefGuideAPI.get_points Method
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

ReefGuideAPI.identify_potential_sites_edges Method
julia
identify_potential_sites_edges(
     df::DataFrame,
     search_pixels::DataFrame,
     res::Float64,
@@ -54,7 +54,7 @@
     degree_step::Float64=15.0,
     n_rot_p_side::Int64=2,
     surr_threshold::Float64=0.33
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

ReefGuideAPI.identify_potential_sites_edges Method
julia
identify_potential_sites_edges(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

ReefGuideAPI.identify_potential_sites_edges Method
julia
identify_potential_sites_edges(
     rst_stack::RasterStack,
     search_pixels::DataFrame,
     gdf::DataFrame,
@@ -65,32 +65,31 @@
     reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}};
     degree_step::Float64=15.0,
     n_rot_per_side::Int64=2
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

ReefGuideAPI.identify_search_pixels Method
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

ReefGuideAPI.initial_search_box Method
julia
initial_search_box(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

ReefGuideAPI.identify_search_pixels Method
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

ReefGuideAPI.initial_search_box Method
julia
initial_search_box(
     (lon::Float64, lat::Float64),
     x_dist::Union{Int64, Float64},
     y_dist::Union{Int64, Float64},
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
     res::Float64
-)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

ReefGuideAPI.initial_search_rotation Method
julia
initial_search_rotation(
+)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

ReefGuideAPI.initial_search_rotation Method
julia
initial_search_rotation(
     pixel::GeometryBasics.Point{2, Float64},
     geom_buff::GI.Wrappers.Polygon,
     gdf::DataFrame,
     reef_outlines::Vector{Vector{GeometryBasics.Line{2, Float64}}};
     search_buffer::Union{Int64,Float64}=20000.0
-)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

ReefGuideAPI.line_angle Method
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
-line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

ReefGuideAPI.make_threshold_mask Method
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

ReefGuideAPI.masked_nearest Method
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long). Note reversed order of coordinates.

Returns

Matrix with the resampled data.

source

ReefGuideAPI.meters_to_degrees Method
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

ReefGuideAPI.move_geom Method
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

ReefGuideAPI.n_gdal_threads Method
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

ReefGuideAPI.nearest Method
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
-small_matrix = nearest(large_raster, (256, 256))

source

ReefGuideAPI.output_geojson Method
julia
output_geojson(
+)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

ReefGuideAPI.line_angle Method
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
+line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

ReefGuideAPI.make_threshold_mask Method
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max, required when generating masks for tiles)

  • lats : Latitudinal extent (min and max, required when generating masks for tiles)

Returns

True/false mask indicating locations within desired thresholds.

source

ReefGuideAPI.meters_to_degrees Method
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

ReefGuideAPI.move_geom Method
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

ReefGuideAPI.n_gdal_threads Method
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

ReefGuideAPI.output_geojson Method
julia
output_geojson(
     df::DataFrame,
     region::String,
     output_dir::String
-)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

ReefGuideAPI.parse_criteria_query Method
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

ReefGuideAPI.polygon_to_lines Method
julia
polygon_to_lines(
+)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

ReefGuideAPI.parse_criteria_query Method
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

ReefGuideAPI.polygon_to_lines Method
julia
polygon_to_lines(
     polygon::Union{Vector{T},T,GIWrap.MultiPolygon}
-) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

ReefGuideAPI.port_buffer_mask Method
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

ReefGuideAPI.remove_rugosity Method
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

ReefGuideAPI.rotate_geom Method
julia
rotate_geom(
+) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

ReefGuideAPI.port_buffer_mask Method
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

ReefGuideAPI.remove_rugosity Method
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

ReefGuideAPI.rotate_geom Method
julia
rotate_geom(
     geom,
     degrees::Float64,
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat
-)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

ReefGuideAPI.rotate_polygon Method

Rotate the polygon by the given angle about its center.

source

ReefGuideAPI.setup_regional_data Method
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

  • config : Configuration settings, typically loaded from a TOML file.

  • reef_data_path : Path to pre-prepared reef data

Returns

OrderedDict of RegionalCriteria for each region.

source

ReefGuideAPI.tile_size Method
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

ReefGuideAPI.valid_lonlat_inds Method
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

  • data :

  • criteria :

  • lb :

  • ub :

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

ReefGuideAPI.valid_pixel_positions Method
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

  • data :

  • criteria :

  • lb : lower bound

  • ub : upper bound

source

ReefGuideAPI.warmup_cache Method
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

ReefGuideAPI.within_thresholds Method
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

- +)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

ReefGuideAPI.rotate_polygon Method

Rotate the polygon by the given angle about its center.

source

ReefGuideAPI.setup_regional_data Method
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

  • config : Configuration settings, typically loaded from a TOML file.

  • reef_data_path : Path to pre-prepared reef data

Returns

OrderedDict of RegionalCriteria for each region.

source

ReefGuideAPI.tile_size Method
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

ReefGuideAPI.valid_lonlat_inds Method
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

  • data :

  • criteria :

  • lb :

  • ub :

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

ReefGuideAPI.valid_pixel_positions Method
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

  • data :

  • criteria :

  • lb : lower bound

  • ub : upper bound

source

ReefGuideAPI.warmup_cache Method
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

ReefGuideAPI.within_thresholds Method
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

+ \ No newline at end of file diff --git a/dev/assets/api.md.DehzNRDj.js b/dev/assets/api.md.Dxqu1QHi.js similarity index 69% rename from dev/assets/api.md.DehzNRDj.js rename to dev/assets/api.md.Dxqu1QHi.js index 96aaa0c..26203f3 100644 --- a/dev/assets/api.md.DehzNRDj.js +++ b/dev/assets/api.md.Dxqu1QHi.js @@ -1,6 +1,6 @@ -import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framework.BvdfcH24.js";const ps=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),h={name:"api.md"},d={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""};function ss(is,s,es,as,ts,ns){const a=r("Badge");return o(),p("div",null,[s[130]||(s[130]=i("h1",{id:"api",tabindex:"-1"},[e("API "),i("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"ReefGuideAPI._cache_location-Tuple{Dict}",href:"#ReefGuideAPI._cache_location-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._cache_location")],-1)),s[1]||(s[1]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[2]||(s[2]=n('
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

',3))]),i("details",k,[i("summary",null,[s[3]||(s[3]=i("a",{id:"ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}",href:"#ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._lon_lat_to_tile")],-1)),s[4]||(s[4]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[5]||(s[5]=n('
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

',5))]),i("details",g,[i("summary",null,[s[6]||(s[6]=i("a",{id:"ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_bounds")],-1)),s[7]||(s[7]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[8]||(s[8]=n('
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

',5))]),i("details",c,[i("summary",null,[s[9]||(s[9]=i("a",{id:"ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_to_lon_lat")],-1)),s[10]||(s[10]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[11]||(s[11]=n('
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

',5))]),i("details",u,[i("summary",null,[s[12]||(s[12]=i("a",{id:"ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}",href:"#ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_thresholds")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n(`
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
+import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framework.DT0TDSCa.js";const ls=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),h={name:"api.md"},d={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""};function Y(ss,s,is,es,as,ts){const a=r("Badge");return o(),p("div",null,[s[127]||(s[127]=i("h1",{id:"api",tabindex:"-1"},[e("API "),i("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"ReefGuideAPI._cache_location-Tuple{Dict}",href:"#ReefGuideAPI._cache_location-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._cache_location")],-1)),s[1]||(s[1]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[2]||(s[2]=n('
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

',3))]),i("details",k,[i("summary",null,[s[3]||(s[3]=i("a",{id:"ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}",href:"#ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._lon_lat_to_tile")],-1)),s[4]||(s[4]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[5]||(s[5]=n('
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

',5))]),i("details",g,[i("summary",null,[s[6]||(s[6]=i("a",{id:"ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_bounds")],-1)),s[7]||(s[7]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[8]||(s[8]=n('
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

',5))]),i("details",c,[i("summary",null,[s[9]||(s[9]=i("a",{id:"ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_to_lon_lat")],-1)),s[10]||(s[10]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[11]||(s[11]=n('
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

',5))]),i("details",u,[i("summary",null,[s[12]||(s[12]=i("a",{id:"ReefGuideAPI.adjusted_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.adjusted_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.adjusted_nearest")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n('
julia
adjusted_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach attempts to account for planetary curvature while still maintaining some performance.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (long, lat).

Returns

Matrix with the resampled data.

source

',7))]),i("details",y,[i("summary",null,[s[15]||(s[15]=i("a",{id:"ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}",href:"#ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_thresholds")],-1)),s[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=n(`
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
 apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Dict)::Raster
-apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",y,[i("summary",null,[s[15]||(s[15]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=n(`
julia
assess_reef_site(
+apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
assess_reef_site(
     rel_pix::DataFrame,
     geom::GI.Wrappers.Polygon,
     max_count::Float64,
@@ -9,20 +9,20 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framewo
     start_rot::Float64=0.0,
     n_per_side::Int64=2,
     surr_threshold::Float64=0.33
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

`,7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
assess_reef_site(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

`,7))]),i("details",f,[i("summary",null,[s[21]||(s[21]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=n(`
julia
assess_reef_site(
     rst::Union{Raster,RasterStack},
     geom::GI.Wrappers.Polygon,
     ruleset::Dict{Symbol,Function};
     degree_step::Float64=15.0,
     start_rot::Float64=0.0,
     n_per_side::Int64=1
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

`,7))]),i("details",f,[i("summary",null,[s[21]||(s[21]=i("a",{id:"ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}",href:"#ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.closest_reef_edge")],-1)),s[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=n(`
julia
closest_reef_edge(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

`,7))]),i("details",F,[i("summary",null,[s[24]||(s[24]=i("a",{id:"ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}",href:"#ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.closest_reef_edge")],-1)),s[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n(`
julia
closest_reef_edge(
     pixel::GeometryBasics.Point{2, Float64},
     reef_lines::Vector{GeometryBasics.Line{2, Float64}}
-)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

`,7))]),i("details",F,[i("summary",null,[s[24]||(s[24]=i("a",{id:"ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}",href:"#ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.create_bbox")],-1)),s[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n('
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

',5))]),i("details",b,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=n('
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

',5))]),i("details",m,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}",href:"#ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.degrees_to_meters")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n(`
julia
filter_distances(
+)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

`,7))]),i("details",m,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}",href:"#ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.create_bbox")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=n('
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

',5))]),i("details",b,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

',5))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}",href:"#ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.degrees_to_meters")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n(`
julia
filter_distances(
     target_rast::Raster,
     dist_buffer
-)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

`,8))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n('
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

',3))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_sites")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

',7))]),i("details",j,[i("summary",null,[s[42]||(s[42]=i("a",{id:"ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.find_horizontal")],-1)),s[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=n('
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

',5))]),i("details",I,[i("summary",null,[s[45]||(s[45]=i("a",{id:"ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}",href:"#ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.from_zero")],-1)),s[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=n('
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

',5))]),i("details",R,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}",href:"#ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.generate_criteria_mask!")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=n('
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

',9))]),i("details",D,[i("summary",null,[s[51]||(s[51]=i("a",{id:"ReefGuideAPI.get_points-Tuple{Any}",href:"#ReefGuideAPI.get_points-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.get_points")],-1)),s[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

',3))]),i("details",T,[i("summary",null,[s[54]||(s[54]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=n(`
julia
identify_potential_sites_edges(
+)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

`,8))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

',3))]),i("details",j,[i("summary",null,[s[42]||(s[42]=i("a",{id:"ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_sites")],-1)),s[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=n('
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

',7))]),i("details",I,[i("summary",null,[s[45]||(s[45]=i("a",{id:"ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.find_horizontal")],-1)),s[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=n('
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

',5))]),i("details",D,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}",href:"#ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.from_zero")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=n('
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

',5))]),i("details",R,[i("summary",null,[s[51]||(s[51]=i("a",{id:"ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}",href:"#ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.generate_criteria_mask!")],-1)),s[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

',9))]),i("details",T,[i("summary",null,[s[54]||(s[54]=i("a",{id:"ReefGuideAPI.get_points-Tuple{Any}",href:"#ReefGuideAPI.get_points-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.get_points")],-1)),s[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=n('
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

',3))]),i("details",v,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
identify_potential_sites_edges(
     df::DataFrame,
     search_pixels::DataFrame,
     res::Float64,
@@ -35,7 +35,7 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framewo
     degree_step::Float64=15.0,
     n_rot_p_side::Int64=2,
     surr_threshold::Float64=0.33
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",v,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
identify_potential_sites_edges(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=n(`
julia
identify_potential_sites_edges(
     rst_stack::RasterStack,
     search_pixels::DataFrame,
     gdf::DataFrame,
@@ -46,28 +46,27 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framewo
     reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}};
     degree_step::Float64=15.0,
     n_rot_per_side::Int64=2
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_search_pixels")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=n('
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

',7))]),i("details",G,[i("summary",null,[s[63]||(s[63]=i("a",{id:"ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}",href:"#ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_box")],-1)),s[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=n(`
julia
initial_search_box(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",G,[i("summary",null,[s[63]||(s[63]=i("a",{id:"ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_search_pixels")],-1)),s[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=n('
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

',7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=i("a",{id:"ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}",href:"#ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_box")],-1)),s[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=n(`
julia
initial_search_box(
     (lon::Float64, lat::Float64),
     x_dist::Union{Int64, Float64},
     y_dist::Union{Int64, Float64},
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
     res::Float64
-)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

`,7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=i("a",{id:"ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_rotation")],-1)),s[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=n(`
julia
initial_search_rotation(
+)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

`,7))]),i("details",P,[i("summary",null,[s[69]||(s[69]=i("a",{id:"ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_rotation")],-1)),s[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=n(`
julia
initial_search_rotation(
     pixel::GeometryBasics.Point{2, Float64},
     geom_buff::GI.Wrappers.Polygon,
     gdf::DataFrame,
     reef_outlines::Vector{Vector{GeometryBasics.Line{2, Float64}}};
     search_buffer::Union{Int64,Float64}=20000.0
-)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

`,5))]),i("details",P,[i("summary",null,[s[69]||(s[69]=i("a",{id:"ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}",href:"#ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.line_angle")],-1)),s[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
-line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

`,9))]),i("details",M,[i("summary",null,[s[72]||(s[72]=i("a",{id:"ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.make_threshold_mask")],-1)),s[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=n('
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",S,[i("summary",null,[s[75]||(s[75]=i("a",{id:"ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.masked_nearest")],-1)),s[76]||(s[76]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[77]||(s[77]=n('
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long). Note reversed order of coordinates.

Returns

Matrix with the resampled data.

source

',7))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}",href:"#ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.meters_to_degrees")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.move_geom-Tuple{Any, Tuple}",href:"#ReefGuideAPI.move_geom-Tuple{Any, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.move_geom")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

',5))]),i("details",V,[i("summary",null,[s[84]||(s[84]=i("a",{id:"ReefGuideAPI.n_gdal_threads-Tuple{Dict}",href:"#ReefGuideAPI.n_gdal_threads-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.n_gdal_threads")],-1)),s[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=n('
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

',3))]),i("details",O,[i("summary",null,[s[87]||(s[87]=i("a",{id:"ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.nearest")],-1)),s[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=n(`
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
-small_matrix = nearest(large_raster, (256, 256))

source

`,9))]),i("details",U,[i("summary",null,[s[90]||(s[90]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}",href:"#ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=n(`
julia
output_geojson(
+)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

`,5))]),i("details",M,[i("summary",null,[s[72]||(s[72]=i("a",{id:"ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}",href:"#ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.line_angle")],-1)),s[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
+line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

`,9))]),i("details",S,[i("summary",null,[s[75]||(s[75]=i("a",{id:"ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.make_threshold_mask")],-1)),s[76]||(s[76]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[77]||(s[77]=n('
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max, required when generating masks for tiles)

  • lats : Latitudinal extent (min and max, required when generating masks for tiles)

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}",href:"#ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.meters_to_degrees")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.move_geom-Tuple{Any, Tuple}",href:"#ReefGuideAPI.move_geom-Tuple{Any, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.move_geom")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

',5))]),i("details",V,[i("summary",null,[s[84]||(s[84]=i("a",{id:"ReefGuideAPI.n_gdal_threads-Tuple{Dict}",href:"#ReefGuideAPI.n_gdal_threads-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.n_gdal_threads")],-1)),s[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=n('
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

',3))]),i("details",O,[i("summary",null,[s[87]||(s[87]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}",href:"#ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=n(`
julia
output_geojson(
     df::DataFrame,
     region::String,
     output_dir::String
-)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

`,5))]),i("details",q,[i("summary",null,[s[93]||(s[93]=i("a",{id:"ReefGuideAPI.parse_criteria_query-Tuple{Dict}",href:"#ReefGuideAPI.parse_criteria_query-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.parse_criteria_query")],-1)),s[94]||(s[94]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=n('
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",z,[i("summary",null,[s[96]||(s[96]=i("a",{id:"ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon",href:"#ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon"},[i("span",{class:"jlbinding"},"ReefGuideAPI.polygon_to_lines")],-1)),s[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n(`
julia
polygon_to_lines(
+)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

`,5))]),i("details",U,[i("summary",null,[s[90]||(s[90]=i("a",{id:"ReefGuideAPI.parse_criteria_query-Tuple{Dict}",href:"#ReefGuideAPI.parse_criteria_query-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.parse_criteria_query")],-1)),s[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=n('
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",q,[i("summary",null,[s[93]||(s[93]=i("a",{id:"ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon",href:"#ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon"},[i("span",{class:"jlbinding"},"ReefGuideAPI.polygon_to_lines")],-1)),s[94]||(s[94]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=n(`
julia
polygon_to_lines(
     polygon::Union{Vector{T},T,GIWrap.MultiPolygon}
-) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

`,5))]),i("details",W,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}",href:"#ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.port_buffer_mask")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

',5))]),i("details",N,[i("summary",null,[s[102]||(s[102]=i("a",{id:"ReefGuideAPI.remove_rugosity-NTuple{4, Any}",href:"#ReefGuideAPI.remove_rugosity-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.remove_rugosity")],-1)),s[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n('
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

',3))]),i("details",H,[i("summary",null,[s[105]||(s[105]=i("a",{id:"ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_geom")],-1)),s[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=n(`
julia
rotate_geom(
+) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

`,5))]),i("details",z,[i("summary",null,[s[96]||(s[96]=i("a",{id:"ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}",href:"#ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.port_buffer_mask")],-1)),s[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

',5))]),i("details",W,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.remove_rugosity-NTuple{4, Any}",href:"#ReefGuideAPI.remove_rugosity-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.remove_rugosity")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

',3))]),i("details",N,[i("summary",null,[s[102]||(s[102]=i("a",{id:"ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_geom")],-1)),s[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n(`
julia
rotate_geom(
     geom,
     degrees::Float64,
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat
-)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

`,5))]),i("details",$,[i("summary",null,[s[108]||(s[108]=i("a",{id:"ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}",href:"#ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_polygon")],-1)),s[109]||(s[109]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[111]||(s[111]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/aa4c0921565db4a6bfff4662e5b5e4220d4c4723/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",J,[i("summary",null,[s[112]||(s[112]=i("a",{id:"ReefGuideAPI.setup_regional_data-Tuple{Dict}",href:"#ReefGuideAPI.setup_regional_data-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.setup_regional_data")],-1)),s[113]||(s[113]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[114]||(s[114]=n('
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

  • config : Configuration settings, typically loaded from a TOML file.

  • reef_data_path : Path to pre-prepared reef data

Returns

OrderedDict of RegionalCriteria for each region.

source

',7))]),i("details",Q,[i("summary",null,[s[115]||(s[115]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[116]||(s[116]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[117]||(s[117]=n('
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

',3))]),i("details",X,[i("summary",null,[s[118]||(s[118]=i("a",{id:"ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_lonlat_inds")],-1)),s[119]||(s[119]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[120]||(s[120]=n('
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

  • data :

  • criteria :

  • lb :

  • ub :

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

',7))]),i("details",Z,[i("summary",null,[s[121]||(s[121]=i("a",{id:"ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_pixel_positions")],-1)),s[122]||(s[122]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[123]||(s[123]=n('
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

  • data :

  • criteria :

  • lb : lower bound

  • ub : upper bound

source

',6))]),i("details",Y,[i("summary",null,[s[124]||(s[124]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[125]||(s[125]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[126]||(s[126]=n('
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

',3))]),i("details",K,[i("summary",null,[s[127]||(s[127]=i("a",{id:"ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T",href:"#ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.within_thresholds")],-1)),s[128]||(s[128]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[129]||(s[129]=n('
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

',5))])])}const rs=l(h,[["render",ss]]);export{ps as __pageData,rs as default}; +)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

`,5))]),i("details",H,[i("summary",null,[s[105]||(s[105]=i("a",{id:"ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}",href:"#ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_polygon")],-1)),s[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[108]||(s[108]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/2e5b172fc20425944a2795c3fe2676d47fecde65/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",$,[i("summary",null,[s[109]||(s[109]=i("a",{id:"ReefGuideAPI.setup_regional_data-Tuple{Dict}",href:"#ReefGuideAPI.setup_regional_data-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.setup_regional_data")],-1)),s[110]||(s[110]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[111]||(s[111]=n('
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

Returns

OrderedDict of RegionalCriteria for each region.

source

',7))]),i("details",J,[i("summary",null,[s[112]||(s[112]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[113]||(s[113]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[114]||(s[114]=n('
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

',3))]),i("details",Q,[i("summary",null,[s[115]||(s[115]=i("a",{id:"ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_lonlat_inds")],-1)),s[116]||(s[116]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[117]||(s[117]=n('
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

',7))]),i("details",Z,[i("summary",null,[s[118]||(s[118]=i("a",{id:"ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_pixel_positions")],-1)),s[119]||(s[119]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[120]||(s[120]=n('
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

source

',6))]),i("details",X,[i("summary",null,[s[121]||(s[121]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[122]||(s[122]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[123]||(s[123]=n('
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

',3))]),i("details",K,[i("summary",null,[s[124]||(s[124]=i("a",{id:"ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T",href:"#ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.within_thresholds")],-1)),s[125]||(s[125]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[126]||(s[126]=n('
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

',5))])])}const ps=l(h,[["render",Y]]);export{ls as __pageData,ps as default}; diff --git a/dev/assets/api.md.DehzNRDj.lean.js b/dev/assets/api.md.Dxqu1QHi.lean.js similarity index 69% rename from dev/assets/api.md.DehzNRDj.lean.js rename to dev/assets/api.md.Dxqu1QHi.lean.js index 96aaa0c..26203f3 100644 --- a/dev/assets/api.md.DehzNRDj.lean.js +++ b/dev/assets/api.md.Dxqu1QHi.lean.js @@ -1,6 +1,6 @@ -import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framework.BvdfcH24.js";const ps=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),h={name:"api.md"},d={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""};function ss(is,s,es,as,ts,ns){const a=r("Badge");return o(),p("div",null,[s[130]||(s[130]=i("h1",{id:"api",tabindex:"-1"},[e("API "),i("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"ReefGuideAPI._cache_location-Tuple{Dict}",href:"#ReefGuideAPI._cache_location-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._cache_location")],-1)),s[1]||(s[1]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[2]||(s[2]=n('
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

',3))]),i("details",k,[i("summary",null,[s[3]||(s[3]=i("a",{id:"ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}",href:"#ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._lon_lat_to_tile")],-1)),s[4]||(s[4]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[5]||(s[5]=n('
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

',5))]),i("details",g,[i("summary",null,[s[6]||(s[6]=i("a",{id:"ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_bounds")],-1)),s[7]||(s[7]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[8]||(s[8]=n('
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

',5))]),i("details",c,[i("summary",null,[s[9]||(s[9]=i("a",{id:"ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_to_lon_lat")],-1)),s[10]||(s[10]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[11]||(s[11]=n('
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

',5))]),i("details",u,[i("summary",null,[s[12]||(s[12]=i("a",{id:"ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}",href:"#ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_thresholds")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n(`
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
+import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framework.DT0TDSCa.js";const ls=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),h={name:"api.md"},d={class:"jldocstring custom-block",open:""},k={class:"jldocstring custom-block",open:""},g={class:"jldocstring custom-block",open:""},c={class:"jldocstring custom-block",open:""},u={class:"jldocstring custom-block",open:""},y={class:"jldocstring custom-block",open:""},E={class:"jldocstring custom-block",open:""},f={class:"jldocstring custom-block",open:""},F={class:"jldocstring custom-block",open:""},m={class:"jldocstring custom-block",open:""},b={class:"jldocstring custom-block",open:""},C={class:"jldocstring custom-block",open:""},A={class:"jldocstring custom-block",open:""},_={class:"jldocstring custom-block",open:""},j={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},R={class:"jldocstring custom-block",open:""},T={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},B={class:"jldocstring custom-block",open:""},G={class:"jldocstring custom-block",open:""},x={class:"jldocstring custom-block",open:""},P={class:"jldocstring custom-block",open:""},M={class:"jldocstring custom-block",open:""},S={class:"jldocstring custom-block",open:""},L={class:"jldocstring custom-block",open:""},w={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},O={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""};function Y(ss,s,is,es,as,ts){const a=r("Badge");return o(),p("div",null,[s[127]||(s[127]=i("h1",{id:"api",tabindex:"-1"},[e("API "),i("a",{class:"header-anchor",href:"#api","aria-label":'Permalink to "API"'},"​")],-1)),i("details",d,[i("summary",null,[s[0]||(s[0]=i("a",{id:"ReefGuideAPI._cache_location-Tuple{Dict}",href:"#ReefGuideAPI._cache_location-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._cache_location")],-1)),s[1]||(s[1]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[2]||(s[2]=n('
julia
_cache_location(config::Dict)::String

Retrieve cache location for geotiffs.

source

',3))]),i("details",k,[i("summary",null,[s[3]||(s[3]=i("a",{id:"ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}",href:"#ReefGuideAPI._lon_lat_to_tile-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._lon_lat_to_tile")],-1)),s[4]||(s[4]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[5]||(s[5]=n('
julia
_lon_lat_to_tile(zoom, lon, lat)

Identify the corresponding tile coordinates for a given lon/lat.

Returns

x and y tile coordinates

source

',5))]),i("details",g,[i("summary",null,[s[6]||(s[6]=i("a",{id:"ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_bounds-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_bounds")],-1)),s[7]||(s[7]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[8]||(s[8]=n('
julia
_tile_bounds(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat bounds of a requested tile.

Returns

West, East, North South (min lon, max lon, lat max, lat min)

source

',5))]),i("details",c,[i("summary",null,[s[9]||(s[9]=i("a",{id:"ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64",href:"#ReefGuideAPI._tile_to_lon_lat-Union{Tuple{T}, Tuple{T, T, T}} where T<:Int64"},[i("span",{class:"jlbinding"},"ReefGuideAPI._tile_to_lon_lat")],-1)),s[10]||(s[10]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[11]||(s[11]=n('
julia
_tile_to_lon_lat(z::T, x::T, y::T) where {T<:Int64}

Obtain lon/lat of top-left corner of a requested tile.

Returns

lon, lat

source

',5))]),i("details",u,[i("summary",null,[s[12]||(s[12]=i("a",{id:"ReefGuideAPI.adjusted_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.adjusted_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.adjusted_nearest")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n('
julia
adjusted_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach attempts to account for planetary curvature while still maintaining some performance.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (long, lat).

Returns

Matrix with the resampled data.

source

',7))]),i("details",y,[i("summary",null,[s[15]||(s[15]=i("a",{id:"ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}",href:"#ReefGuideAPI.apply_criteria_thresholds-Tuple{Rasters.RasterStack, DataFrames.DataFrame, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_thresholds")],-1)),s[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=n(`
julia
apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})::Raster
 apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::Dict)::Raster
-apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",y,[i("summary",null,[s[15]||(s[15]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=n(`
julia
assess_reef_site(
+apply_criteria_thresholds(criteria_stack::RasterStack, lookup::DataFrame, ruleset::NamedTuple)::Raster

Apply thresholds for each criteria.

Arguments

  • criteria_stack : RasterStack of criteria data for a given region

  • lookup : Lookup dataframe for the region

  • ruleset : A set of CriteriaBounds, Dictionary or NamedTuple indicating a mapping of criteria names to their lower and upper thresholds.

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.assess_reef_site-Tuple{DataFrames.DataFrame, GeoInterface.Wrappers.Polygon, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
assess_reef_site(
     rel_pix::DataFrame,
     geom::GI.Wrappers.Polygon,
     max_count::Float64,
@@ -9,20 +9,20 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framewo
     start_rot::Float64=0.0,
     n_per_side::Int64=2,
     surr_threshold::Float64=0.33
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

`,7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
assess_reef_site(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon,Int64}

Assesses the rotations of a search box geom for their suitability score (calculated as the proportion of pixels that meet all specified criteria thresholds). Search box rotation steps are returned so that the start_rot angle is 0, rotations anti-clockwise are negative and rotations clockwise are positive.

Arguments

  • rel_pix : DataFrame containing the point data for pixels that are within maxmimum user search box dimensions from a pixel.

  • geom : Starting search box for assessment.

  • max_count : The maximum number of pixels that can intersect the search box (used to standardise scores between 0 and 1).

  • target_crs : Coordinate Reference System used for analysis vector and raster data.

  • degree_step : Step to vary the search box rotations.

  • start_rot : Starting angle rotation that aligns the box with the closest reef edge.

  • n_per_side : Number of rotations to perform around the starting search box angle.

  • surr_threshold : Suitability threshold, below which sites are excluded from result sets.

Returns

  • Highest score

  • Highest scoring rotation step

  • Highest scoring polygon

  • Quality control flag for site, indicating if surr_threshold was met in the highest scoring rotation.

source

`,7))]),i("details",f,[i("summary",null,[s[21]||(s[21]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon, Dict{Symbol, Function}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=n(`
julia
assess_reef_site(
     rst::Union{Raster,RasterStack},
     geom::GI.Wrappers.Polygon,
     ruleset::Dict{Symbol,Function};
     degree_step::Float64=15.0,
     start_rot::Float64=0.0,
     n_per_side::Int64=1
-)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

`,7))]),i("details",f,[i("summary",null,[s[21]||(s[21]=i("a",{id:"ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}",href:"#ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.closest_reef_edge")],-1)),s[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=n(`
julia
closest_reef_edge(
+)::Tuple{Float64,Int64,GI.Wrappers.Polygon}

Assess given reef site for it's suitability score at different specified rotations around the initial reef-edge rotation.

Arguments

  • rst : Raster or RasterStack object used to assess site suitability.

  • geom : Initial site polygon with no rotation applied.

  • ruleset : Criteria ruleset to apply to rst pixels when assessing which pixels are suitable.

  • degree_step : Degree value to vary each rotation by. Default = 15 degrees.

  • start_rot : Initial rotation used to align the site polygon with the nearest reef edge. Default = 0 degrees.

  • n_per_side : Number of times to rotate polygon on each side (clockwise and anticlockwise). Default = 2 rotations on each side.

Returns

  • Highest score identified with rotating polygons.

  • The index of the highest scoring rotation.

  • The polygon with the highest score out of the assessed rotated polygons.

source

`,7))]),i("details",F,[i("summary",null,[s[24]||(s[24]=i("a",{id:"ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}",href:"#ReefGuideAPI.closest_reef_edge-Tuple{GeometryBasics.Point{2, Float64}, Vector{GeometryBasics.Line{2, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.closest_reef_edge")],-1)),s[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n(`
julia
closest_reef_edge(
     pixel::GeometryBasics.Point{2, Float64},
     reef_lines::Vector{GeometryBasics.Line{2, Float64}}
-)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

`,7))]),i("details",F,[i("summary",null,[s[24]||(s[24]=i("a",{id:"ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}",href:"#ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.create_bbox")],-1)),s[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n('
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

',5))]),i("details",b,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=n('
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

',5))]),i("details",m,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}",href:"#ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.degrees_to_meters")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n(`
julia
filter_distances(
+)::Vector{Tuple{Float64, Float64}}

Find the nearest line in reef_lines to a point pixel.

Arguments

  • pixel : Target point geometry.

  • reef_lines : Vector containing lines for comparison.

Returns

Coordinates of the reef edge line that is closest to the target pixel. Returned in Tuples.

source

`,7))]),i("details",m,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}",href:"#ReefGuideAPI.create_bbox-Tuple{Tuple, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.create_bbox")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=n('
julia
create_bbox(xs::Tuple, ys::Tuple)::Vector{Tuple{Float64, Float64}}

Create bounding box from x and y coordinates

Returns

Bounding box coordinates in order of top left, top right, bottom right, bottom left, top left.

source

',5))]),i("details",b,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
criteria_middleware(handle)

Creates middleware that parses a criteria query before reaching an endpoint

Example

https://somewhere:8000/suitability/assess/region-name/reeftype?criteria_names=Depth,Slope&lb=-9.0,0.0&ub=-2.0,40

source

',5))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}",href:"#ReefGuideAPI.degrees_to_meters-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.degrees_to_meters")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n(`
julia
filter_distances(
     target_rast::Raster,
     dist_buffer
-)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

`,8))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n('
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

',3))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_sites")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

',7))]),i("details",j,[i("summary",null,[s[42]||(s[42]=i("a",{id:"ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.find_horizontal")],-1)),s[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=n('
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

',5))]),i("details",I,[i("summary",null,[s[45]||(s[45]=i("a",{id:"ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}",href:"#ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.from_zero")],-1)),s[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=n('
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

',5))]),i("details",R,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}",href:"#ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.generate_criteria_mask!")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=n('
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

',9))]),i("details",D,[i("summary",null,[s[51]||(s[51]=i("a",{id:"ReefGuideAPI.get_points-Tuple{Any}",href:"#ReefGuideAPI.get_points-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.get_points")],-1)),s[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

',3))]),i("details",T,[i("summary",null,[s[54]||(s[54]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=n(`
julia
identify_potential_sites_edges(
+)::Raster

Apply a mask to exclude pixels that are outside the indicated distance buffer(s).

target_rast and the dist_buffer should be in the same CRS (e.g., EPSG:7844 / GDA2020).

Arguments

  • target_rast : Raster of suitable pixels (Bool) to filter pixels from.

  • dist_buffer : Buffer geometry to use as the mask.

Returns

  • Masked boolean raster indicating pixels that are within the target distance.

source

`,8))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{DataFrames.DataFrame, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
filter_far_polygons(gdf::DataFrame, pixel::GIWrap.Point, lat::Float64, dist::Union{Int64,Float64})::BitVector

Filter out reefs that are > dist (meters) from the target pixel (currently dist is hardcoded in initial_search_rotation()).

source

',3))]),i("details",j,[i("summary",null,[s[42]||(s[42]=i("a",{id:"ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.filter_sites-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_sites")],-1)),s[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=n('
julia
filter_sites(res_df::DataFrame)::DataFrame

Filter out sites where the qc_flag indicates a suitabiltiy < surr_threshold in searching. Where site polygons are overlapping, keep only the highest scoring site polygon.

Arguments

  • res_df : Results DataFrame containing potential site polygons (output from identify_potential_sites() or identify_potential_sites_edges()).

Returns

DataFrame containing only the highest scoring sites where site polygons intersect, and containing only sites with scores greater than the surr_threshold specified in identify_potential_sites_edges() (default=0.33).

source

',7))]),i("details",I,[i("summary",null,[s[45]||(s[45]=i("a",{id:"ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.find_horizontal-Tuple{GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.find_horizontal")],-1)),s[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=n('
julia
find_horizontal(geom::GI.Wrappers.Polygon)::Vector{Tuple{Float64,Float64}, Tuple{Float64,Float64}}

Find a horizontal line if one exists within a geometry.

Returns

Vector containing tuples of coordinates for a horizontal line found within geom.

source

',5))]),i("details",D,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}",href:"#ReefGuideAPI.from_zero-Tuple{Vector{Tuple{Float64, Float64}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.from_zero")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=n('
julia
from_zero(v::Vector{Tuple{Float64,Float64}})::Vector{Tuple{Float64, Float64}}

Translates Vector of points v to begin from (0, 0), retaining direction and length.

Argument

  • v : Vector of point coordinates (Tuple{Float64, Float64}).

source

',5))]),i("details",R,[i("summary",null,[s[51]||(s[51]=i("a",{id:"ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}",href:"#ReefGuideAPI.generate_criteria_mask!-Tuple{String, Rasters.RasterStack, DataFrames.DataFrame, Vector{ReefGuideAPI.CriteriaBounds{Function}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.generate_criteria_mask!")],-1)),s[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
generate_criteria_mask!(fn::String, rst_stack::RasterStack, lookup::DataFrame, ruleset::Vector{CriteriaBounds{Function}})

Generate mask file for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • fn : File to write geotiff to

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

Returns

Nothing

source

',9))]),i("details",T,[i("summary",null,[s[54]||(s[54]=i("a",{id:"ReefGuideAPI.get_points-Tuple{Any}",href:"#ReefGuideAPI.get_points-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.get_points")],-1)),s[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=n('
julia
get_points(geom)

Helper method to retrieve points for a geometry.

source

',3))]),i("details",v,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{DataFrames.DataFrame, DataFrames.DataFrame, Float64, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Vector{Vector{GeometryBasics.Line{2, Float64}}}, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
identify_potential_sites_edges(
     df::DataFrame,
     search_pixels::DataFrame,
     res::Float64,
@@ -35,7 +35,7 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framewo
     degree_step::Float64=15.0,
     n_rot_p_side::Int64=2,
     surr_threshold::Float64=0.33
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",v,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
identify_potential_sites_edges(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon in meters. A buffer of the raster files' resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters. Method is currently opperating for CRS in degrees units.

Arguments

  • df : DataFrame containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat columns for each pixel that is intended for analysis.

  • res : Resolution of the original raster pixels. Can by found via abs(step(dims(raster, X))).

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box (in meters).

  • y_dist : Length of vertical side of search box (in meters).

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • reef_lines : Vector containing reef outline segments created from polygons in gdf.geometry (Must be separate object to gdf rather than column).

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_p_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

  • surr_threshold : Theshold used to skip searching where the proportion of suitable pixels is too low.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.identify_potential_sites_edges-Tuple{Rasters.RasterStack, DataFrames.DataFrame, DataFrames.DataFrame, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, String, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_potential_sites_edges")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=n(`
julia
identify_potential_sites_edges(
     rst_stack::RasterStack,
     search_pixels::DataFrame,
     gdf::DataFrame,
@@ -46,28 +46,27 @@ import{_ as l,c as p,j as i,a as e,G as t,a5 as n,B as r,o}from"./chunks/framewo
     reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}};
     degree_step::Float64=15.0,
     n_rot_per_side::Int64=2
-)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_search_pixels")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=n('
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

',7))]),i("details",G,[i("summary",null,[s[63]||(s[63]=i("a",{id:"ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}",href:"#ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_box")],-1)),s[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=n(`
julia
initial_search_box(
+)::DataFrame

Identify the most suitable site polygons for each pixel in the search_pixels DataFrame. x_dist and y_dist are x and y lengths of the search polygon. A buffer of rst_stack resolution is applied to the search box. And angle from a pixel to a reef edge is identified and used for searching with custom rotation parameters.

Arguments

  • rst_stack : RasterStack containing environmental variables for assessment.

  • search_pixels : DataFrame containing lon and lat values for each pixel intended for

  • gdf : GeoDataFrame containing the reef outlines used to align the search box edge.

  • x_dist : Length of horizontal side of search box.

  • y_dist : Length of vertical side of search box.

  • target_crs : CRS of the input Rasters. Using GeoFormatTypes.EPSG().

  • region : Management region name in GBRMPA format - e.g. "Mackay/Capricorn Management Area"

  • reef_lines : Vector containing reef outline segments for each reef in gdf.geometry (Must be separate object to gdf rather than a column).

  • degree_step : Degree to perform rotations around identified edge angle.

  • n_rot_per_side : Number of rotations to perform clockwise and anticlockwise around the identified edge angle. Default 2 rotations.

Returns

DataFrame containing highest score, rotation and polygon for each assessment at pixels in indices.

source

`,7))]),i("details",G,[i("summary",null,[s[63]||(s[63]=i("a",{id:"ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}",href:"#ReefGuideAPI.identify_search_pixels-Tuple{Rasters.Raster, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.identify_search_pixels")],-1)),s[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=n('
julia
identify_search_pixels(input_raster::Raster, criteria_function)::DataFrame

Identifies all pixels in an input raster that return true for the function criteria_function.

Arguments

  • input_raster : Raster containing pixels for the target region.

  • criteria_function : Function that returns a boolean value for each pixel in input_raster. Pixels that return true will be targetted in analysis.

Returns

DataFrame containing indices, lon and lat for each pixel that is intended for further analysis.

source

',7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=i("a",{id:"ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}",href:"#ReefGuideAPI.initial_search_box-Tuple{Any, Union{Float64, Int64}, Union{Float64, Int64}, GeoFormatTypes.CoordinateReferenceSystemFormat, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_box")],-1)),s[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=n(`
julia
initial_search_box(
     (lon::Float64, lat::Float64),
     x_dist::Union{Int64, Float64},
     y_dist::Union{Int64, Float64},
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
     res::Float64
-)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

`,7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=i("a",{id:"ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_rotation")],-1)),s[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=n(`
julia
initial_search_rotation(
+)::GI.Wrappers.Polygon

Create an initial search box that is centered around the point (lon, lat) in target_crs, and is buffered by res distance.

Arguments

  • (lon, lat) : Longitude and latitude coordinates of the center target pixel.

  • x_dist : x (longitude) dimension length of initial search box.

  • y_dist : y (latitude) dimension length of initial search box.

  • target_crs : Target CRS of box to match input data types.

  • res : Buffer distance (resolution of input raster search data).

Returns

Initial search box geometry.

source

`,7))]),i("details",P,[i("summary",null,[s[69]||(s[69]=i("a",{id:"ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}",href:"#ReefGuideAPI.initial_search_rotation-Tuple{GeometryBasics.Point{2, Float64}, GeoInterface.Wrappers.Polygon, DataFrames.DataFrame, Vector{Vector{GeometryBasics.Line{2, Float64}}}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.initial_search_rotation")],-1)),s[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=n(`
julia
initial_search_rotation(
     pixel::GeometryBasics.Point{2, Float64},
     geom_buff::GI.Wrappers.Polygon,
     gdf::DataFrame,
     reef_outlines::Vector{Vector{GeometryBasics.Line{2, Float64}}};
     search_buffer::Union{Int64,Float64}=20000.0
-)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

`,5))]),i("details",P,[i("summary",null,[s[69]||(s[69]=i("a",{id:"ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}",href:"#ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.line_angle")],-1)),s[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
-line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

`,9))]),i("details",M,[i("summary",null,[s[72]||(s[72]=i("a",{id:"ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.make_threshold_mask")],-1)),s[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=n('
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max)

  • lats : Latitudinal extent (min and max)

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",S,[i("summary",null,[s[75]||(s[75]=i("a",{id:"ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.masked_nearest-Tuple{Rasters.Raster, Int64, Int64, Int64, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.masked_nearest")],-1)),s[76]||(s[76]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[77]||(s[77]=n('
julia
masked_nearest(rst::Raster, z::Int, x::Int, y::Int, tile_size::Tuple{Int,Int}, orig_rst_size::Tuple{Int,Int})::Matrix

Resample a raster using nearest neighbor interpolation when the tile includes area outside where data exists (e.g., viewing the globe where the data may appear in a small corner of the tile). This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • z: Tile zoom level requested.

  • x: x coordinate for requested tile.

  • y: y coordinate for the requested tile.

  • tile_size: The desired dimensions of the tile (lat, long). Note reversed order of coordinates.

Returns

Matrix with the resampled data.

source

',7))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}",href:"#ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.meters_to_degrees")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.move_geom-Tuple{Any, Tuple}",href:"#ReefGuideAPI.move_geom-Tuple{Any, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.move_geom")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

',5))]),i("details",V,[i("summary",null,[s[84]||(s[84]=i("a",{id:"ReefGuideAPI.n_gdal_threads-Tuple{Dict}",href:"#ReefGuideAPI.n_gdal_threads-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.n_gdal_threads")],-1)),s[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=n('
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

',3))]),i("details",O,[i("summary",null,[s[87]||(s[87]=i("a",{id:"ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}",href:"#ReefGuideAPI.nearest-Tuple{Rasters.Raster, Tuple{Int64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.nearest")],-1)),s[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=n(`
julia
nearest(rst::Raster, tile_size::Tuple{Int, Int})::Matrix

Resample a raster to a tile size using nearest neighbor interpolation. This approach prioritising performance over accuracy.

Arguments

  • rst: The input raster to be resampled.

  • tile_size: The desired dimensions of the tile (lat, long).

Returns

Matrix with the resampled data.

Examples

julia
large_raster = Raster(rand(UInt8, 14756, 14838); dims=(X(1:1:14756), Y(1:1:14838)))
-small_matrix = nearest(large_raster, (256, 256))

source

`,9))]),i("details",U,[i("summary",null,[s[90]||(s[90]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}",href:"#ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=n(`
julia
output_geojson(
+)::Float64

Identifies the closest edge to the target pixel/'geom_buff and returns the initial rotation angle required to match the edge line.

Arguments

  • pixel : Target point at the center of the search polygon.

  • geom_buff : Initial search box with zero rotation.

  • gdf : GeoDataFrame containing a geometry column used for pixel masking.

  • reef_outlines : Line segments for the outlines of each reef in gdf.

  • search_buffer : Distance to search from pixel to find closest reef.

source

`,5))]),i("details",M,[i("summary",null,[s[72]||(s[72]=i("a",{id:"ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}",href:"#ReefGuideAPI.line_angle-Union{Tuple{T}, Tuple{T, T}} where T<:Vector{Tuple{Float64, Float64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.line_angle")],-1)),s[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

  • a : Line between point coordinates.

  • b : Line between point coordinates.

Returns

Angle between the two lines.

Examples

julia
line_angle([(0.0,5.0), (0.0,0.0)], from_zero(edge_line))
+line_angle([(0.0,5.0), (0.0,0.0)], [(1.0, 4.0), (7.0, 8.0)])

source

`,9))]),i("details",S,[i("summary",null,[s[75]||(s[75]=i("a",{id:"ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.make_threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.make_threshold_mask")],-1)),s[76]||(s[76]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[77]||(s[77]=n('
julia
make_threshold_mask(reg::String, rtype::Symbol, crit_map)

Generate mask for a given region and reef type (slopes or flats) according to thresholds applied to a set of criteria.

Notes

  • Zeros indicate locations to mask out.

  • Ones indicate locations to keep.

Arguments

  • reg_criteria : RegionalCriteria to assess

  • rtype : reef type to assess (:slopes or :flats)

  • crit_map : List of criteria thresholds to apply (see apply_criteria_thresholds())

  • lons : Longitudinal extent (min and max, required when generating masks for tiles)

  • lats : Latitudinal extent (min and max, required when generating masks for tiles)

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}",href:"#ReefGuideAPI.meters_to_degrees-Tuple{Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.meters_to_degrees")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.move_geom-Tuple{Any, Tuple}",href:"#ReefGuideAPI.move_geom-Tuple{Any, Tuple}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.move_geom")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

  • geom : geometry to move

  • new_centroid : Centroid given in (lon, lat).

source

',5))]),i("details",V,[i("summary",null,[s[84]||(s[84]=i("a",{id:"ReefGuideAPI.n_gdal_threads-Tuple{Dict}",href:"#ReefGuideAPI.n_gdal_threads-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.n_gdal_threads")],-1)),s[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=n('
julia
n_gdal_threads(config::Dict)::String

Retrieve the configured number of threads to use when writing COGs with GDAL.

source

',3))]),i("details",O,[i("summary",null,[s[87]||(s[87]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}",href:"#ReefGuideAPI.output_geojson-Tuple{DataFrames.DataFrame, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=n(`
julia
output_geojson(
     df::DataFrame,
     region::String,
     output_dir::String
-)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

`,5))]),i("details",q,[i("summary",null,[s[93]||(s[93]=i("a",{id:"ReefGuideAPI.parse_criteria_query-Tuple{Dict}",href:"#ReefGuideAPI.parse_criteria_query-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.parse_criteria_query")],-1)),s[94]||(s[94]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=n('
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",z,[i("summary",null,[s[96]||(s[96]=i("a",{id:"ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon",href:"#ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon"},[i("span",{class:"jlbinding"},"ReefGuideAPI.polygon_to_lines")],-1)),s[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n(`
julia
polygon_to_lines(
+)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: "output_dir/output_sites_region.geojson"

Arguments

  • df : DataFrame intended for writing to geojson file.

  • region : Region name for labelling output file.

  • output_dir : Directory to write geojson file to.

source

`,5))]),i("details",U,[i("summary",null,[s[90]||(s[90]=i("a",{id:"ReefGuideAPI.parse_criteria_query-Tuple{Dict}",href:"#ReefGuideAPI.parse_criteria_query-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.parse_criteria_query")],-1)),s[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=n('
julia
parse_criteria_query(qp)::Tuple

Parse criteria values from request query.

Queries should take the form of: Depth=-9.0:0.0&Slope=0.0:40.0&Rugosity=0.0:0.0

Arguments

  • qp : Parsed query string from request.

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",q,[i("summary",null,[s[93]||(s[93]=i("a",{id:"ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon",href:"#ReefGuideAPI.polygon_to_lines-Union{Tuple{Union{GeoInterface.Wrappers.MultiPolygon, Vector{T}, T}}, Tuple{T}} where T<:GeoInterface.Wrappers.Polygon"},[i("span",{class:"jlbinding"},"ReefGuideAPI.polygon_to_lines")],-1)),s[94]||(s[94]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[95]||(s[95]=n(`
julia
polygon_to_lines(
     polygon::Union{Vector{T},T,GIWrap.MultiPolygon}
-) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

`,5))]),i("details",W,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}",href:"#ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.port_buffer_mask")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

',5))]),i("details",N,[i("summary",null,[s[102]||(s[102]=i("a",{id:"ReefGuideAPI.remove_rugosity-NTuple{4, Any}",href:"#ReefGuideAPI.remove_rugosity-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.remove_rugosity")],-1)),s[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n('
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

',3))]),i("details",H,[i("summary",null,[s[105]||(s[105]=i("a",{id:"ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_geom")],-1)),s[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=n(`
julia
rotate_geom(
+) where {T<:GIWrap.Polygon}

Extract the individual lines between vertices that make up the outline of a polygon.

Returns

Vector of GeometryBasics.Line{2, Float64} with one line for each adjacent vertex pair in polygon.

source

`,5))]),i("details",z,[i("summary",null,[s[96]||(s[96]=i("a",{id:"ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}",href:"#ReefGuideAPI.port_buffer_mask-Tuple{DataFrames.DataFrame, Float64}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.port_buffer_mask")],-1)),s[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

  • gdf : GeoDataFrame of port locations (given as long/lat points)

  • dist : distance from port in degrees (deg), kilometers (km), or nautical miles (NM; default)

  • unit : unit dist is in

source

',5))]),i("details",W,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.remove_rugosity-NTuple{4, Any}",href:"#ReefGuideAPI.remove_rugosity-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.remove_rugosity")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
remove_rugosity(reg, criteria, lbs, ubs)

Remove rugosity layer from consideration if region is not Townsville. Rugosity data currently only exists for the Townsville region.

source

',3))]),i("details",N,[i("summary",null,[s[102]||(s[102]=i("a",{id:"ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}",href:"#ReefGuideAPI.rotate_geom-Tuple{Any, Float64, GeoFormatTypes.CoordinateReferenceSystemFormat}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_geom")],-1)),s[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n(`
julia
rotate_geom(
     geom,
     degrees::Float64,
     target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat
-)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

`,5))]),i("details",$,[i("summary",null,[s[108]||(s[108]=i("a",{id:"ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}",href:"#ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_polygon")],-1)),s[109]||(s[109]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[111]||(s[111]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/aa4c0921565db4a6bfff4662e5b5e4220d4c4723/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",J,[i("summary",null,[s[112]||(s[112]=i("a",{id:"ReefGuideAPI.setup_regional_data-Tuple{Dict}",href:"#ReefGuideAPI.setup_regional_data-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.setup_regional_data")],-1)),s[113]||(s[113]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[114]||(s[114]=n('
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

  • config : Configuration settings, typically loaded from a TOML file.

  • reef_data_path : Path to pre-prepared reef data

Returns

OrderedDict of RegionalCriteria for each region.

source

',7))]),i("details",Q,[i("summary",null,[s[115]||(s[115]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[116]||(s[116]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[117]||(s[117]=n('
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

',3))]),i("details",X,[i("summary",null,[s[118]||(s[118]=i("a",{id:"ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_lonlat_inds")],-1)),s[119]||(s[119]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[120]||(s[120]=n('
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

  • data :

  • criteria :

  • lb :

  • ub :

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

',7))]),i("details",Z,[i("summary",null,[s[121]||(s[121]=i("a",{id:"ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_pixel_positions")],-1)),s[122]||(s[122]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[123]||(s[123]=n('
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

  • data :

  • criteria :

  • lb : lower bound

  • ub : upper bound

source

',6))]),i("details",Y,[i("summary",null,[s[124]||(s[124]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[125]||(s[125]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[126]||(s[126]=n('
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

',3))]),i("details",K,[i("summary",null,[s[127]||(s[127]=i("a",{id:"ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T",href:"#ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.within_thresholds")],-1)),s[128]||(s[128]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[129]||(s[129]=n('
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

',5))])])}const rs=l(h,[["render",ss]]);export{ps as __pageData,rs as default}; +)

Rotate target geom by degrees rotation in clockwise direction. target_crs is applied to output geometry.

Returns

Rotated geometry.

source

`,5))]),i("details",H,[i("summary",null,[s[105]||(s[105]=i("a",{id:"ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}",href:"#ReefGuideAPI.rotate_polygon-Tuple{Any, Any, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.rotate_polygon")],-1)),s[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[108]||(s[108]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/2e5b172fc20425944a2795c3fe2676d47fecde65/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",$,[i("summary",null,[s[109]||(s[109]=i("a",{id:"ReefGuideAPI.setup_regional_data-Tuple{Dict}",href:"#ReefGuideAPI.setup_regional_data-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.setup_regional_data")],-1)),s[110]||(s[110]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[111]||(s[111]=n('
julia
setup_regional_data(config::Dict)

Load regional data to act as an in-memory cache.

Arguments

Returns

OrderedDict of RegionalCriteria for each region.

source

',7))]),i("details",J,[i("summary",null,[s[112]||(s[112]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[113]||(s[113]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[114]||(s[114]=n('
julia
tile_size(config::Dict)::Tuple

Retrieve the configured size of map tiles in pixels (width and height / lon and lat).

source

',3))]),i("details",Q,[i("summary",null,[s[115]||(s[115]=i("a",{id:"ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_lonlat_inds-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_lonlat_inds")],-1)),s[116]||(s[116]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[117]||(s[117]=n('
julia
valid_lonlat_inds(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Retrieve the indices of valid data for a region.

Arguments

Returns

Tuple{Vector{Int64}, Vector{Int64}}, of lon and lat indices.

source

',7))]),i("details",Z,[i("summary",null,[s[118]||(s[118]=i("a",{id:"ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T",href:"#ReefGuideAPI.valid_pixel_positions-Union{Tuple{T}, Tuple{DataFrames.DataFrame, Symbol, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.valid_pixel_positions")],-1)),s[119]||(s[119]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[120]||(s[120]=n('
julia
valid_pixel_positions(data::DataFrame, criteria::Symbol, lb::T, ub::T) where {T}

Obtain the pixel positions of valid data.

Intended for use in applications similar to ImageryLayer - client side pixel filter.

Arguments

source

',6))]),i("details",X,[i("summary",null,[s[121]||(s[121]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[122]||(s[122]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[123]||(s[123]=n('
julia
warmup_cache(config_path::String)

Invokes warm up of regional data cache to reduce later spin up times.

source

',3))]),i("details",K,[i("summary",null,[s[124]||(s[124]=i("a",{id:"ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T",href:"#ReefGuideAPI.within_thresholds-Union{Tuple{T}, Tuple{Val, Val, Rasters.Raster, T, T}} where T"},[i("span",{class:"jlbinding"},"ReefGuideAPI.within_thresholds")],-1)),s[125]||(s[125]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[126]||(s[126]=n('
julia
within_thresholds(ctype::Val, data::Raster, lb::T, ub::T) where {T}

Apply in-bound constraints.

Notes

Why is this a simple one line function? Because we want to be able to cache results for each constraint type.

source

',5))])])}const ps=l(h,[["render",Y]]);export{ls as __pageData,ps as default}; diff --git a/dev/assets/app.DWRAVX01.js b/dev/assets/app.XWT9iCUG.js similarity index 90% rename from dev/assets/app.DWRAVX01.js rename to dev/assets/app.XWT9iCUG.js index ba59e77..c23b1e3 100644 --- a/dev/assets/app.DWRAVX01.js +++ b/dev/assets/app.XWT9iCUG.js @@ -1 +1 @@ -import{R as p}from"./chunks/theme._B5YJXUN.js";import{R as o,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,af as v,d as P,u as R,v as w,s as y,ag as C,ah as b,ai as E,a4 as S}from"./chunks/framework.BvdfcH24.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(p),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; +import{R as p}from"./chunks/theme.Db56iT4S.js";import{R as o,a6 as u,a7 as c,a8 as l,a9 as f,aa as d,ab as m,ac as h,ad as g,ae as A,af as v,d as P,u as R,v as w,s as y,ag as C,ah as b,ai as E,a4 as S}from"./chunks/framework.DT0TDSCa.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(p),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=v(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/dev/assets/chunks/@localSearchIndexroot.BIq-6JjD.js b/dev/assets/chunks/@localSearchIndexroot.BIq-6JjD.js deleted file mode 100644 index b416742..0000000 --- a/dev/assets/chunks/@localSearchIndexroot.BIq-6JjD.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":20,"nextId":20,"documentIds":{"0":"/ReefGuideAPI.jl/dev/api#api","1":"/ReefGuideAPI.jl/dev/docker#Docker-build-and-run","2":"/ReefGuideAPI.jl/dev/docker#Mounting-files-and-required-data","3":"/ReefGuideAPI.jl/dev/docker#To-build-from-src-files-using-Docker","4":"/ReefGuideAPI.jl/dev/docker#To-build-from-src-files-using-Docker-Compose","5":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(launch-server)-using-Docker","6":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(launch-server)-using-Docker-Compose","7":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(interactive-shell)-using-Docker","8":"/ReefGuideAPI.jl/dev/getting_started#Getting-Started","9":"/ReefGuideAPI.jl/dev/getting_started#setup","10":"/ReefGuideAPI.jl/dev/getting_started#JWT-Auth-configuration","11":"/ReefGuideAPI.jl/dev/getting_started#Auth-TODOs","12":"/ReefGuideAPI.jl/dev/getting_started#quickstart","13":"/ReefGuideAPI.jl/dev/getting_started#Dynamic-COG-generation","14":"/ReefGuideAPI.jl/dev/getting_started#Simple-Slippy-Tiles","15":"/ReefGuideAPI.jl/dev/getting_started#Development-setup","16":"/ReefGuideAPI.jl/dev/getting_started#Performance-notes","17":"/ReefGuideAPI.jl/dev/getting_started#Reef-edge-alignment-for-site-searching","18":"/ReefGuideAPI.jl/dev/getting_started#Parquet-assessment-additional-setup","19":"/ReefGuideAPI.jl/dev/#reefguideapi-jl"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,640],"1":[4,1,45],"2":[5,4,54],"3":[7,4,7],"4":[8,4,7],"5":[9,4,8],"6":[10,4,6],"7":[9,4,31],"8":[2,1,1],"9":[1,2,93],"10":[3,2,73],"11":[2,5,8],"12":[1,2,95],"13":[3,2,17],"14":[3,2,22],"15":[2,2,71],"16":[2,2,49],"17":[6,2,94],"18":[4,8,51],"19":[2,1,8]},"averageFieldLength":[4.2,2.85,69],"storedFields":{"0":{"title":"API","titles":[]},"1":{"title":"Docker build and run","titles":[]},"2":{"title":"Mounting files and required data","titles":["Docker build and run"]},"3":{"title":"To build from src files using Docker","titles":["Docker build and run"]},"4":{"title":"To build from src files using Docker Compose","titles":["Docker build and run"]},"5":{"title":"To run with mounted files (launch server) using Docker","titles":["Docker build and run"]},"6":{"title":"To run with mounted files (launch server) using Docker Compose","titles":["Docker build and run"]},"7":{"title":"To run with mounted files (interactive shell) using Docker","titles":["Docker build and run"]},"8":{"title":"Getting Started","titles":[]},"9":{"title":"Setup","titles":["Getting Started"]},"10":{"title":"JWT Auth configuration","titles":["Getting Started"]},"11":{"title":"Auth TODOs","titles":["Getting Started","JWT Auth configuration"]},"12":{"title":"Quickstart","titles":["Getting Started"]},"13":{"title":"Dynamic COG generation","titles":["Getting Started"]},"14":{"title":"Simple Slippy Tiles","titles":["Getting Started"]},"15":{"title":"Development setup","titles":["Getting Started"]},"16":{"title":"Performance notes","titles":["Getting Started"]},"17":{"title":"Reef edge alignment for site searching","titles":["Getting Started"]},"18":{"title":"Parquet assessment additional setup","titles":["Getting Started","Reef edge alignment for site searching"]},"19":{"title":"ReefGuideAPI.jl","titles":[]}},"dirtCount":0,"index":[["$",{"2":{"15":2}}],["json",{"2":{"10":2}}],["jwks",{"2":{"10":2}}],["jwts",{"2":{"10":1}}],["jwt",{"0":{"10":1},"1":{"11":1},"2":{"10":6}}],["jl",{"0":{"19":1},"2":{"1":2,"2":1,"15":2}}],["julia>",{"2":{"15":2}}],["juliausing",{"2":{"7":1,"12":1}}],["juliawithin",{"2":{"0":1}}],["juliawarmup",{"2":{"0":1}}],["juliavalid",{"2":{"0":2}}],["juliatile",{"2":{"0":1}}],["juliasetup",{"2":{"0":1}}],["juliarotate",{"2":{"0":1}}],["juliaremove",{"2":{"0":1}}],["juliaport",{"2":{"0":1}}],["juliapolygon",{"2":{"0":1}}],["juliaparse",{"2":{"0":1}}],["juliaoutput",{"2":{"0":1}}],["julialarge",{"2":{"0":1}}],["julialine",{"2":{"0":2}}],["julianearest",{"2":{"0":1}}],["julian",{"2":{"0":1}}],["juliamove",{"2":{"0":1}}],["juliameters",{"2":{"0":1}}],["juliamasked",{"2":{"0":1}}],["juliamake",{"2":{"0":1}}],["juliainitial",{"2":{"0":2}}],["juliaidentify",{"2":{"0":3}}],["juliaget",{"2":{"0":1}}],["juliagenerate",{"2":{"0":1}}],["juliafrom",{"2":{"0":1}}],["juliafind",{"2":{"0":1}}],["juliafilter",{"2":{"0":3}}],["juliadegrees",{"2":{"0":1}}],["juliacriteria",{"2":{"0":1}}],["juliacreate",{"2":{"0":1}}],["juliaclosest",{"2":{"0":1}}],["juliaassess",{"2":{"0":2}}],["juliaapply",{"2":{"0":1}}],["julia",{"2":{"0":4,"1":1,"7":2,"9":1,"12":1,"15":4}}],["known",{"2":{"10":1}}],["key",{"2":{"10":2}}],["keep",{"2":{"0":3}}],["km",{"2":{"0":1}}],["kilometers",{"2":{"0":1}}],["8",{"2":{"0":1,"12":1,"14":1,"16":1}}],["8000",{"2":{"0":1,"5":2,"13":1,"14":1}}],["7",{"2":{"0":1}}],["7844",{"2":{"0":1}}],["4",{"2":{"0":1,"12":1,"16":1}}],["40",{"2":{"0":2,"13":1,"14":1}}],["5",{"2":{"0":2}}],["qp",{"2":{"0":2}}],["qc",{"2":{"0":1}}],["quickstart",{"0":{"12":1},"2":{"15":1}}],["queries",{"2":{"0":1}}],["query",{"2":{"0":5}}],["quot",{"2":{"0":6,"17":4}}],["quality",{"2":{"0":1}}],["9",{"2":{"0":2,"13":1,"14":1}}],["higher",{"2":{"12":1,"16":1}}],["highest",{"2":{"0":11}}],["how",{"2":{"2":1,"12":1,"16":1}}],["horizontal",{"2":{"0":6}}],["health",{"2":{"11":1}}],["header",{"2":{"10":1}}],["height",{"2":{"0":1}}],["helper",{"2":{"0":1}}],["have",{"2":{"2":2,"17":1}}],["has",{"2":{"1":1}}],["hardcoded",{"2":{"0":1}}],["handle",{"2":{"0":1}}],["https",{"2":{"0":1,"9":1,"10":3}}],["231",{"2":{"14":1}}],["256",{"2":{"0":2,"9":2}}],["2",{"2":{"0":11,"9":1,"12":1,"16":1}}],["=20000",{"2":{"0":1}}],["=",{"2":{"0":5,"9":6,"10":3,"12":1,"18":2}}],["3",{"2":{"14":1}}],["39",{"2":{"0":3}}],["33",{"2":{"0":3}}],["environment",{"2":{"15":1}}],["environmental",{"2":{"0":2}}],["enviroment",{"2":{"15":1}}],["env",{"2":{"12":1}}],["ensure",{"2":{"11":1}}],["enabled",{"2":{"10":1}}],["enable",{"2":{"10":1,"12":1}}],["entrypoint=",{"2":{"7":1}}],["endpoints",{"2":{"10":1}}],["endpoint",{"2":{"0":1,"10":2}}],["epsg",{"2":{"0":3}}],["e",{"2":{"0":4,"7":1,"15":1,"17":1,"18":1}}],["exactly",{"2":{"10":1}}],["examples",{"2":{"0":2}}],["example",{"2":{"0":1,"13":1,"14":1}}],["expected",{"2":{"10":1}}],["expect",{"2":{"10":1}}],["extract",{"2":{"0":1}}],["extent",{"2":{"0":2}}],["exists",{"2":{"0":3}}],["excludes",{"2":{"2":1}}],["exclude",{"2":{"0":1}}],["excluded",{"2":{"0":1}}],["edges",{"2":{"0":6,"17":2,"18":1}}],["edge",{"0":{"17":1},"1":{"18":1},"2":{"0":17,"17":2}}],["each",{"2":{"0":17}}],["east",{"2":{"0":1}}],["vs",{"2":{"15":1}}],["view",{"2":{"1":1}}],["viewing",{"2":{"0":1}}],["via",{"2":{"0":1}}],["versions",{"2":{"1":1}}],["vertex",{"2":{"0":1,"17":2}}],["vertices",{"2":{"0":1}}],["vertical",{"2":{"0":2}}],["vector",{"2":{"0":26,"17":1}}],["v",{"2":{"0":3,"5":1,"7":1}}],["val",{"2":{"0":1}}],["validate",{"2":{"10":1}}],["valid",{"2":{"0":4,"10":1,"18":2}}],["values",{"2":{"0":2,"12":1,"16":1}}],["value",{"2":{"0":2}}],["variables",{"2":{"0":2}}],["vary",{"2":{"0":2}}],["139",{"2":{"14":1}}],["127",{"2":{"13":1,"14":1}}],["10",{"2":{"12":1,"16":1}}],["1a",{"2":{"9":1}}],["14838",{"2":{"0":2}}],["14756",{"2":{"0":2}}],["15",{"2":{"0":1,"12":1,"16":1}}],["1",{"2":{"0":6,"9":1,"12":1,"13":1,"14":1}}],["unsuitable",{"2":{"18":1}}],["unit",{"2":{"0":3}}],["units",{"2":{"0":1}}],["union",{"2":{"0":10}}],["url",{"2":{"13":1,"14":1}}],["ub",{"2":{"0":5}}],["ubs",{"2":{"0":1}}],["ub=",{"2":{"0":1}}],["up",{"2":{"0":3,"4":1,"6":1,"12":2,"16":1}}],["upper",{"2":{"0":3}}],["uint8",{"2":{"0":1}}],["usual",{"2":{"9":1}}],["using",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":4,"18":1}}],["use",{"2":{"0":3,"7":1,"9":2,"17":2}}],["used",{"2":{"0":10,"17":1,"18":1}}],["user",{"2":{"0":1,"18":1}}],["0",{"2":{"0":42,"13":7,"14":9}}],["purposes",{"2":{"12":1}}],["public",{"2":{"10":2}}],["published",{"2":{"1":1}}],["publish",{"2":{"1":1}}],["please",{"2":{"2":1}}],["pay",{"2":{"10":1}}],["page",{"2":{"1":1,"12":1}}],["packages",{"2":{"1":1}}],["package",{"2":{"1":2,"2":1}}],["path",{"2":{"0":3,"9":1}}],["pair",{"2":{"0":1}}],["parquet",{"0":{"18":1},"2":{"18":1}}],["parallel",{"2":{"12":1}}],["parameters",{"2":{"0":2}}],["parsed",{"2":{"0":1}}],["parse",{"2":{"0":2}}],["parses",{"2":{"0":1}}],["provided",{"2":{"17":1}}],["provides",{"2":{"10":1}}],["project=",{"2":{"12":1,"15":1}}],["project",{"2":{"9":1,"15":2}}],["processing",{"2":{"17":1}}],["process",{"2":{"1":1}}],["proportion",{"2":{"0":2}}],["preferably",{"2":{"12":1,"16":1}}],["prepped",{"2":{"9":2}}],["prepared",{"2":{"0":1}}],["pre",{"2":{"0":1}}],["prioritising",{"2":{"0":2}}],["p",{"2":{"0":2,"5":1}}],["possibly",{"2":{"17":1}}],["positions",{"2":{"0":3}}],["positive",{"2":{"0":1}}],["port",{"2":{"0":4}}],["potential",{"2":{"0":8,"17":2,"18":1}}],["points",{"2":{"0":5}}],["point",{"2":{"0":11}}],["polygons",{"2":{"0":10,"17":4}}],["polygon",{"2":{"0":25,"17":2}}],["performance",{"0":{"16":1},"2":{"0":2,"12":1}}],["perform",{"2":{"0":5}}],["per",{"2":{"0":6}}],["pixel",{"2":{"0":25,"17":1}}],["pixels",{"2":{"0":25,"17":3,"18":3}}],["pix",{"2":{"0":2}}],["based",{"2":{"18":1}}],["bash$",{"2":{"15":1}}],["bashjulia",{"2":{"12":1}}],["bashdocker",{"2":{"3":1,"4":1,"5":1,"6":1,"7":1}}],["block",{"2":{"9":1}}],["but",{"2":{"12":1,"16":1}}],["build",{"0":{"1":1,"3":1,"4":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":2,"3":1,"4":1}}],["buff",{"2":{"0":3}}],["buffered",{"2":{"0":1,"17":1}}],["buffer",{"2":{"0":13}}],["b",{"2":{"0":2}}],["bitvector",{"2":{"0":1}}],["bitmatrix",{"2":{"0":1}}],["bbox",{"2":{"0":2}}],["by",{"2":{"0":5,"9":1,"17":2}}],["been",{"2":{"17":1}}],["best",{"2":{"12":1}}],["bearer",{"2":{"10":1}}],["because",{"2":{"0":1}}],["begin",{"2":{"0":1}}],["be",{"2":{"0":8,"1":1,"9":1,"10":3,"12":3,"15":1,"16":2,"17":5,"18":3}}],["before",{"2":{"0":1,"17":1}}],["below",{"2":{"0":1,"2":1,"15":1}}],["between",{"2":{"0":6,"15":1}}],["boolean",{"2":{"0":2}}],["bool",{"2":{"0":1,"10":1,"17":1}}],["bottom",{"2":{"0":2}}],["bound",{"2":{"0":3}}],["bounding",{"2":{"0":2}}],["bounds",{"2":{"0":5}}],["box",{"2":{"0":26}}],["nautical",{"2":{"0":1}}],["named",{"2":{"2":1,"9":1}}],["namedtuple",{"2":{"0":2}}],["name",{"2":{"0":4,"17":1}}],["names=depth",{"2":{"0":1}}],["names",{"2":{"0":2}}],["nm",{"2":{"0":2}}],["necessary",{"2":{"15":1}}],["needing",{"2":{"1":1}}],["new",{"2":{"0":3}}],["neighbor",{"2":{"0":2}}],["nearest",{"2":{"0":8,"17":1}}],["negative",{"2":{"0":1}}],["now",{"2":{"15":1}}],["not",{"2":{"0":1,"11":1}}],["note",{"2":{"0":1,"2":1,"9":1,"15":1}}],["notes",{"0":{"16":1},"2":{"0":3}}],["nothing",{"2":{"0":2}}],["no",{"2":{"0":1}}],["north",{"2":{"0":1}}],["number",{"2":{"0":6,"9":1}}],["n",{"2":{"0":9}}],["false",{"2":{"0":1,"9":1,"10":1}}],["far",{"2":{"0":2}}],["further",{"2":{"0":1}}],["function",{"2":{"0":9}}],["fn",{"2":{"0":2}}],["four",{"2":{"12":1,"16":1}}],["found",{"2":{"0":2}}],["following",{"2":{"10":1,"17":1}}],["folder",{"2":{"2":2}}],["form",{"2":{"0":1,"12":1}}],["format",{"2":{"0":2,"10":1,"17":1}}],["for",{"0":{"17":1},"1":{"18":1},"2":{"0":47,"7":1,"10":1,"12":2,"17":1,"18":2,"19":1}}],["first",{"2":{"10":1,"18":1}}],["files",{"0":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":1,"2":3,"9":1}}],["file",{"2":{"0":8,"2":2,"9":3,"15":2}}],["filtered",{"2":{"18":1}}],["filter",{"2":{"0":7}}],["findall",{"2":{"17":1}}],["find",{"2":{"0":4}}],["flats",{"2":{"0":4}}],["flag",{"2":{"0":2}}],["float64=0",{"2":{"0":4}}],["float64=15",{"2":{"0":4}}],["float64",{"2":{"0":43,"18":1}}],["from",{"0":{"3":1,"4":1},"2":{"0":18,"12":1,"16":1,"17":1}}],["dynamic",{"0":{"13":1}}],["downtime",{"2":{"15":1}}],["do",{"2":{"12":1,"16":1}}],["dockerfile",{"2":{"1":1}}],["docker",{"0":{"1":1,"3":1,"4":1,"5":1,"6":1,"7":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":1,"2":1}}],["due",{"2":{"2":1}}],["df",{"2":{"0":6}}],["displays",{"2":{"9":1,"12":1}}],["disables",{"2":{"9":1}}],["distance",{"2":{"0":6}}],["distances",{"2":{"0":2}}],["dist",{"2":{"0":25}}],["directory",{"2":{"0":2,"2":1,"15":1}}],["direction",{"2":{"0":2}}],["dir",{"2":{"0":3,"9":3}}],["diminishing",{"2":{"12":1,"16":1}}],["dimension",{"2":{"0":2}}],["dimensions",{"2":{"0":3}}],["dims=",{"2":{"0":1}}],["dims",{"2":{"0":1}}],["different",{"2":{"0":1}}],["dictionary",{"2":{"0":1}}],["dict",{"2":{"0":6,"18":1}}],["development",{"0":{"15":1}}],["dev",{"2":{"12":1,"15":3}}],["debug",{"2":{"9":2,"12":2}}],["defined",{"2":{"9":1}}],["defaults",{"2":{"9":2}}],["default=0",{"2":{"0":1}}],["default",{"2":{"0":6,"15":1,"18":1}}],["deg",{"2":{"0":1}}],["degrees",{"2":{"0":11}}],["degree",{"2":{"0":11}}],["depth=",{"2":{"0":1,"13":1,"14":1}}],["desired",{"2":{"0":4}}],["datasets>",{"2":{"9":1}}],["dataset",{"2":{"9":1}}],["data",{"0":{"2":1},"2":{"0":23,"2":4,"5":2,"7":3,"9":4,"15":2}}],["dataframe",{"2":{"0":34}}],["root",{"2":{"15":2}}],["route",{"2":{"11":1}}],["rotating",{"2":{"0":1}}],["rotation",{"2":{"0":19}}],["rotations",{"2":{"0":13,"17":1}}],["rotated",{"2":{"0":2}}],["rotate",{"2":{"0":5}}],["rot",{"2":{"0":9}}],["rm",{"2":{"7":1}}],["running",{"2":{"2":1}}],["run",{"0":{"1":1,"5":1,"6":1,"7":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":1,"5":1,"7":1}}],["rugosity",{"2":{"0":4}}],["rugosity=0",{"2":{"0":1,"14":1}}],["ruleset",{"2":{"0":8}}],["range",{"2":{"12":1,"16":1}}],["rand",{"2":{"0":1}}],["rather",{"2":{"0":2,"17":1}}],["rast",{"2":{"0":3}}],["rasters",{"2":{"0":2}}],["rasterstack",{"2":{"0":9}}],["raster",{"2":{"0":30,"17":3}}],["rtype=slopes",{"2":{"14":1}}],["rtype",{"2":{"0":3}}],["right",{"2":{"0":2}}],["rst",{"2":{"0":12}}],["repl",{"2":{"15":1}}],["repository",{"2":{"1":1}}],["revise",{"2":{"15":1}}],["reversed",{"2":{"0":1}}],["ready",{"2":{"7":1}}],["reaching",{"2":{"0":1}}],["reduce",{"2":{"0":1,"12":1,"15":1,"16":1}}],["remove",{"2":{"0":2}}],["require",{"2":{"17":1}}],["requires",{"2":{"2":1}}],["required",{"0":{"2":1},"2":{"0":1,"2":2,"17":1}}],["request",{"2":{"0":2}}],["requested",{"2":{"0":5,"12":1,"16":1}}],["reg",{"2":{"0":4}}],["region=cairns",{"2":{"14":1}}],["regional",{"2":{"0":4,"9":2}}],["regionalcriteria",{"2":{"0":3}}],["region",{"2":{"0":20,"17":1}}],["restart",{"2":{"15":1}}],["resolvable",{"2":{"10":1}}],["resolution",{"2":{"0":4}}],["resampled",{"2":{"0":4}}],["resample",{"2":{"0":2}}],["res",{"2":{"0":7}}],["results",{"2":{"0":2}}],["result",{"2":{"0":1}}],["reference",{"2":{"0":1}}],["reload",{"2":{"15":1}}],["rel",{"2":{"0":2}}],["reefguide",{"2":{"3":2,"4":1,"5":2,"6":1,"7":3}}],["reefguideapi",{"0":{"19":1},"2":{"0":43,"1":2,"2":1,"7":3,"12":3}}],["reefs",{"2":{"0":1}}],["reeftype",{"2":{"0":1}}],["reef",{"0":{"17":1},"1":{"18":1},"2":{"0":35,"9":1,"17":7,"19":1}}],["retaining",{"2":{"0":1}}],["return",{"2":{"0":2,"10":1,"17":1}}],["returned",{"2":{"0":2}}],["returns",{"2":{"0":27,"12":1,"16":1}}],["retrieved",{"2":{"10":1}}],["retrieve",{"2":{"0":5}}],["mkdir",{"2":{"15":1}}],["mpa",{"2":{"9":2}}],["multiple",{"2":{"12":1}}],["multipolygon",{"2":{"0":1}}],["must",{"2":{"0":2,"18":2}}],["mode",{"2":{"9":1}}],["mounted",{"0":{"5":1,"6":1,"7":1}}],["mounting",{"0":{"2":1}}],["move",{"2":{"0":3}}],["most",{"2":{"0":2}}],["miles",{"2":{"0":1}}],["middleware",{"2":{"0":3}}],["min",{"2":{"0":4}}],["messages",{"2":{"12":1}}],["mentioned",{"2":{"2":1}}],["means",{"2":{"1":1}}],["memory",{"2":{"0":1}}],["method",{"2":{"0":2,"17":1}}],["meters",{"2":{"0":9}}],["met",{"2":{"0":1}}],["meet",{"2":{"0":1}}],["main",{"2":{"12":1}}],["many",{"2":{"12":1,"16":1}}],["management",{"2":{"0":4,"17":1}}],["may",{"2":{"0":1}}],["matrix",{"2":{"0":5}}],["matching",{"2":{"17":1}}],["match",{"2":{"0":2,"10":1}}],["make",{"2":{"0":2}}],["mackay",{"2":{"0":2}}],["map",{"2":{"0":4}}],["mapping",{"2":{"0":1}}],["masking",{"2":{"0":2,"18":1}}],["masked",{"2":{"0":2,"17":1}}],["mask",{"2":{"0":13}}],["maximum",{"2":{"0":1}}],["maxmimum",{"2":{"0":1}}],["max",{"2":{"0":6}}],["works",{"2":{"17":1}}],["working",{"2":{"2":1}}],["wkt",{"2":{"10":4}}],["web",{"2":{"10":1}}],["well",{"2":{"10":1}}],["we",{"2":{"0":1,"2":1}}],["west",{"2":{"0":1}}],["way",{"2":{"9":1}}],["want",{"2":{"0":1}}],["warm",{"2":{"0":1}}],["warmup",{"2":{"0":1}}],["was",{"2":{"0":1}}],["width",{"2":{"0":1}}],["will",{"2":{"0":2,"1":1,"7":1,"12":2,"15":1,"16":1}}],["without",{"2":{"1":1}}],["with",{"0":{"5":1,"6":1,"7":1},"2":{"0":13,"1":1,"2":1,"12":3,"16":2,"17":2}}],["within",{"2":{"0":7,"18":1}}],["writing",{"2":{"0":2,"12":1,"16":1}}],["writes",{"2":{"0":1}}],["write",{"2":{"0":2,"12":2,"16":2}}],["wrappers",{"2":{"0":7}}],["whitsunday",{"2":{"17":2}}],["which",{"2":{"0":2,"10":2}}],["why",{"2":{"0":1}}],["when",{"2":{"0":3,"2":1,"9":1,"12":1,"16":1}}],["where",{"2":{"0":13,"7":1,"10":1}}],["optional",{"2":{"9":3}}],["open",{"2":{"9":1}}],["opperating",{"2":{"0":1}}],["over",{"2":{"0":2}}],["overlapping",{"2":{"0":1}}],["outline",{"2":{"0":3}}],["outlines",{"2":{"0":5}}],["output",{"2":{"0":9}}],["outside",{"2":{"0":2}}],["out",{"2":{"0":6,"12":1,"16":1}}],["ones",{"2":{"0":2}}],["one",{"2":{"0":3,"12":1}}],["only",{"2":{"0":4,"17":1}}],["on",{"2":{"0":2,"1":1,"18":1}}],["object",{"2":{"0":3}}],["obtain",{"2":{"0":3}}],["orig",{"2":{"0":1}}],["original",{"2":{"0":1}}],["ordereddict",{"2":{"0":1}}],["order",{"2":{"0":2}}],["or",{"2":{"0":8,"17":2}}],["of",{"2":{"0":64,"1":2,"2":1,"9":2,"17":4}}],["ideally",{"2":{"12":1,"16":1}}],["identifies",{"2":{"0":2}}],["identified",{"2":{"0":7}}],["identifying",{"2":{"17":2}}],["identify",{"2":{"0":9,"17":2,"18":1}}],["image",{"2":{"1":1}}],["imagerylayer",{"2":{"0":1}}],["its",{"2":{"0":1,"12":1}}],["it",{"2":{"0":1,"1":1,"2":1,"15":1}}],["if",{"2":{"0":3,"12":1}}],["issuer",{"2":{"10":4}}],["iss",{"2":{"10":2}}],["is",{"2":{"0":17,"2":2,"7":1,"9":1,"11":1,"15":1,"17":1}}],["inaccurate",{"2":{"17":1}}],["infiltrator",{"2":{"15":1}}],["info",{"2":{"9":1,"12":1}}],["include",{"2":{"2":1,"15":1}}],["includes",{"2":{"0":1}}],["instantiate",{"2":{"9":1}}],["instance",{"2":{"1":1}}],["installation",{"2":{"1":1}}],["invokes",{"2":{"0":1}}],["input",{"2":{"0":10,"2":1}}],["inds",{"2":{"0":2}}],["individual",{"2":{"0":1}}],["indices",{"2":{"0":5,"17":2}}],["indicate",{"2":{"0":4}}],["indicates",{"2":{"0":1}}],["indicated",{"2":{"0":2}}],["indicating",{"2":{"0":5,"9":1}}],["index",{"2":{"0":1}}],["initially",{"2":{"15":1}}],["initialize",{"2":{"9":1}}],["initial",{"2":{"0":12}}],["in",{"2":{"0":35,"2":4,"9":2,"10":1,"12":1,"15":2,"17":1,"18":1}}],["into",{"2":{"17":1}}],["int",{"2":{"0":9}}],["interactive",{"0":{"7":1},"2":{"7":1,"12":1}}],["interpolation",{"2":{"0":2}}],["intersect",{"2":{"0":2}}],["intended",{"2":{"0":5}}],["int64=1",{"2":{"0":1}}],["int64=2",{"2":{"0":3}}],["int64",{"2":{"0":15}}],["zeros",{"2":{"0":2}}],["zero",{"2":{"0":4}}],["z",{"2":{"0":4}}],["zoom",{"2":{"0":2}}],["your",{"2":{"2":1}}],["you",{"2":{"1":2,"2":1,"15":1}}],["ys",{"2":{"0":1}}],["y",{"2":{"0":19}}],["x26",{"2":{"13":1,"14":4}}],["xs",{"2":{"0":1}}],["x3c",{"2":{"0":4,"9":2}}],["x",{"2":{"0":22}}],["go",{"2":{"17":1}}],["guidance",{"2":{"9":1}}],["gbr",{"2":{"9":1}}],["gbrmpa",{"2":{"0":2,"17":1}}],["globe",{"2":{"0":1}}],["generation",{"0":{"13":1}}],["generate",{"2":{"0":3}}],["getting",{"0":{"8":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"2":1}}],["get",{"2":{"0":1}}],["geojson",{"2":{"0":6}}],["geodataframe",{"2":{"0":4,"18":2}}],["geotiff",{"2":{"0":1}}],["geotiffs>",{"2":{"9":1}}],["geotiffs",{"2":{"0":1}}],["geoformattypes",{"2":{"0":7}}],["geometries",{"2":{"17":1}}],["geometry",{"2":{"0":11,"18":3}}],["geometrybasics",{"2":{"0":7}}],["geom",{"2":{"0":20}}],["greater",{"2":{"0":1}}],["gt",{"2":{"0":1,"10":1}}],["gdal",{"2":{"0":3}}],["gda2020",{"2":{"0":1}}],["gdf",{"2":{"0":14}}],["g",{"2":{"0":4,"7":1,"15":1,"17":1,"18":1}}],["github",{"2":{"9":1}}],["giwrap",{"2":{"0":3}}],["gi",{"2":{"0":7,"18":1}}],["given",{"2":{"0":8}}],["avoid",{"2":{"17":1}}],["available",{"2":{"2":1,"12":1}}],["away",{"2":{"17":1}}],["added",{"2":{"18":1}}],["additional",{"0":{"18":1}}],["additionally",{"2":{"10":1}}],["add",{"2":{"10":1,"15":1}}],["adjacent",{"2":{"0":1}}],["authorised",{"2":{"11":1}}],["authorization",{"2":{"10":1}}],["auth",{"0":{"10":1,"11":1},"1":{"11":1},"2":{"10":2}}],["aims",{"2":{"9":1}}],["act",{"2":{"0":1}}],["accuracy",{"2":{"0":2}}],["according",{"2":{"0":2}}],["able",{"2":{"0":1,"1":1}}],["about",{"2":{"0":1}}],["abs",{"2":{"0":1}}],["amp",{"2":{"0":4}}],["attention",{"2":{"10":1}}],["at",{"2":{"0":7,"12":2,"15":1,"16":1}}],["alignment",{"0":{"17":1},"1":{"18":1}}],["align",{"2":{"0":3,"17":1}}],["aligns",{"2":{"0":1}}],["all",{"2":{"0":2}}],["an",{"2":{"0":4,"1":2,"19":1}}],["analysis",{"2":{"0":4}}],["anticlockwise",{"2":{"0":3}}],["anti",{"2":{"0":1}}],["angle",{"2":{"0":17,"17":1}}],["and",{"0":{"1":1,"2":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":35,"1":1,"2":1,"7":1,"9":1,"10":2,"15":2,"17":2,"18":3}}],["argument",{"2":{"0":1}}],["arguments",{"2":{"0":23}}],["around",{"2":{"0":8}}],["area",{"2":{"0":3,"17":1}}],["are",{"2":{"0":12,"9":1,"12":1,"15":1}}],["assuming",{"2":{"15":1}}],["assumes",{"2":{"15":1}}],["assumed",{"2":{"2":1}}],["associated",{"2":{"1":1}}],["assessed",{"2":{"0":1}}],["assesses",{"2":{"0":1}}],["assessing",{"2":{"0":1}}],["assessments",{"2":{"19":1}}],["assessment",{"0":{"18":1},"2":{"0":5,"9":1}}],["assess",{"2":{"0":9,"13":1}}],["as",{"2":{"0":4,"2":1,"17":1,"18":2}}],["approach",{"2":{"0":2}}],["appear",{"2":{"0":1}}],["applications",{"2":{"0":1}}],["applied",{"2":{"0":6}}],["apply",{"2":{"0":11}}],["api",{"0":{"0":1},"2":{"10":2,"19":1}}],["a",{"2":{"0":43,"1":1,"2":3,"7":1,"9":1,"10":2,"12":2,"15":2,"17":1,"18":2}}],["testing",{"2":{"12":1}}],["tested",{"2":{"12":1,"16":1}}],["tty",{"2":{"7":1}}],["typically",{"2":{"0":1}}],["types",{"2":{"0":1}}],["type",{"2":{"0":5}}],["take",{"2":{"0":1}}],["targetted",{"2":{"0":1}}],["target",{"2":{"0":27,"3":1,"17":2}}],["two",{"2":{"0":2}}],["true",{"2":{"0":3,"10":2}}],["translates",{"2":{"0":1}}],["tip",{"2":{"12":1}}],["tiff",{"2":{"9":1}}],["times",{"2":{"0":2,"12":2,"16":2}}],["tiles",{"0":{"14":1},"2":{"0":1}}],["tile",{"2":{"0":23,"9":2,"14":1}}],["tuples",{"2":{"0":2}}],["tuple",{"2":{"0":20}}],["thread",{"2":{"12":1}}],["threads=4",{"2":{"12":1}}],["threads",{"2":{"0":3,"9":2,"12":4,"16":3}}],["threshold",{"2":{"0":10}}],["thresholds",{"2":{"0":17,"18":2}}],["this",{"2":{"0":3,"1":1,"2":1,"7":1,"9":1,"12":1,"16":1,"17":2}}],["than",{"2":{"0":3,"17":1}}],["that",{"2":{"0":17,"15":1,"17":2}}],["these",{"2":{"2":1,"9":1}}],["theshold",{"2":{"0":1}}],["their",{"2":{"0":2,"17":1}}],["the",{"2":{"0":89,"1":5,"2":6,"9":5,"10":9,"12":2,"15":10,"16":1,"17":4,"18":4}}],["t",{"2":{"0":23,"3":1}}],["todos",{"0":{"11":1}}],["token",{"2":{"10":1}}],["toml",{"2":{"0":1,"2":2,"7":1,"9":3,"10":2,"12":1,"15":1}}],["townsville",{"2":{"0":2,"17":2}}],["too",{"2":{"0":1}}],["top",{"2":{"0":4}}],["to",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":80,"1":2,"2":2,"9":7,"10":4,"12":5,"15":7,"16":4,"17":5,"18":1}}],["lb",{"2":{"0":5}}],["lbs",{"2":{"0":1}}],["lb=",{"2":{"0":1}}],["launches",{"2":{"15":1}}],["launch",{"0":{"5":1,"6":1},"2":{"2":1}}],["layer",{"2":{"0":1}}],["labelling",{"2":{"0":1}}],["large",{"2":{"0":1}}],["latest",{"2":{"1":1}}],["later",{"2":{"0":1}}],["latitudinal",{"2":{"0":1}}],["latitude",{"2":{"0":4}}],["lats",{"2":{"0":1}}],["lat",{"2":{"0":26,"18":1}}],["list",{"2":{"0":2}}],["line",{"2":{"0":18}}],["lines",{"2":{"0":13,"17":3}}],["least",{"2":{"12":2,"16":1}}],["leading",{"2":{"9":1}}],["level",{"2":{"0":1}}],["lengths",{"2":{"0":2}}],["length",{"2":{"0":7}}],["left",{"2":{"0":4}}],["lt",{"2":{"0":1,"10":1}}],["logs",{"2":{"9":1}}],["locally",{"2":{"2":1,"12":1,"16":1}}],["local",{"2":{"1":1}}],["located",{"2":{"0":1}}],["locations",{"2":{"0":8}}],["location",{"2":{"0":4,"9":3}}],["loaded",{"2":{"0":1,"15":1,"18":1}}],["load",{"2":{"0":1}}],["low",{"2":{"0":1}}],["lower",{"2":{"0":3}}],["lookup",{"2":{"0":6}}],["lonlat",{"2":{"0":2}}],["long",{"2":{"0":3}}],["longitudinal",{"2":{"0":1}}],["longitude",{"2":{"0":2}}],["lons",{"2":{"0":1}}],["lon",{"2":{"0":20,"18":2}}],["save",{"2":{"15":1}}],["sandbox",{"2":{"15":8}}],["same",{"2":{"0":1,"18":1}}],["slippy",{"0":{"14":1}}],["slope=0",{"2":{"0":1,"13":1,"14":1}}],["slopes",{"2":{"0":4,"13":1}}],["slope",{"2":{"0":1}}],["script",{"2":{"9":1}}],["scoring",{"2":{"0":6}}],["scores",{"2":{"0":2}}],["score",{"2":{"0":7}}],["shell",{"0":{"7":1},"2":{"7":1}}],["should",{"2":{"0":2,"9":1,"10":2,"12":1,"16":1,"17":4,"18":1}}],["src",{"0":{"3":1,"4":1},"2":{"3":1,"4":1,"6":1}}],["spatial",{"2":{"15":2}}],["spun",{"2":{"12":1}}],["spin",{"2":{"0":1}}],["specified",{"2":{"0":3,"17":2,"18":1}}],["small",{"2":{"0":2}}],["skip",{"2":{"0":1}}],["s",{"2":{"0":2}}],["symbol",{"2":{"0":4}}],["system",{"2":{"0":1}}],["some",{"2":{"9":3}}],["somewhere",{"2":{"0":1}}],["so",{"2":{"0":1}}],["south",{"2":{"0":1}}],["source",{"2":{"0":43}}],["supporting",{"2":{"19":1}}],["suitabiltiy",{"2":{"0":1}}],["suitability",{"2":{"0":5,"19":1}}],["suitable",{"2":{"0":5}}],["surr",{"2":{"0":7}}],["session",{"2":{"15":1}}],["seconds",{"2":{"12":1,"16":1}}],["second",{"2":{"10":1}}],["server",{"0":{"5":1,"6":1},"2":{"2":1,"7":1,"9":1,"12":2,"15":4}}],["separate",{"2":{"0":2}}],["segments",{"2":{"0":3}}],["seem",{"2":{"12":1,"16":1}}],["see",{"2":{"0":2}}],["searching",{"0":{"17":1},"1":{"18":1},"2":{"0":4}}],["search",{"2":{"0":40,"17":4}}],["setting",{"2":{"12":1,"16":1}}],["settings",{"2":{"0":1}}],["setup",{"0":{"9":1,"15":1,"18":1},"2":{"0":1}}],["sets",{"2":{"0":1}}],["set",{"2":{"0":3,"2":1,"12":1,"16":1}}],["simplify",{"2":{"17":1}}],["simplified",{"2":{"17":3}}],["simple",{"0":{"14":1},"2":{"0":1,"12":1}}],["similar",{"2":{"0":1}}],["size",{"2":{"0":9,"9":2}}],["side",{"2":{"0":15}}],["sites",{"2":{"0":14,"17":2,"18":1}}],["site",{"0":{"17":1},"1":{"18":1},"2":{"0":15}}],["state",{"2":{"12":1}}],["standardise",{"2":{"0":1}}],["started",{"0":{"8":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"2":1}}],["starting",{"2":{"0":3}}],["start",{"2":{"0":5,"7":2,"12":2,"15":1}}],["stack",{"2":{"0":8}}],["steps",{"2":{"0":1,"15":1}}],["step",{"2":{"0":11,"9":1}}],["string=",{"2":{"0":1}}],["string",{"2":{"0":10}}],["chairmarks",{"2":{"15":1}}],["check",{"2":{"11":1}}],["cd",{"2":{"15":2}}],["c",{"2":{"9":1}}],["ctype",{"2":{"0":1}}],["claim",{"2":{"10":1}}],["client",{"2":{"0":1}}],["closest",{"2":{"0":5,"17":1}}],["clockwise",{"2":{"0":6}}],["centroid",{"2":{"0":4}}],["center",{"2":{"0":3}}],["centered",{"2":{"0":1}}],["current",{"2":{"12":1}}],["currently",{"2":{"0":3,"2":1,"9":1,"17":1}}],["custom",{"2":{"0":2}}],["cartesianindices",{"2":{"17":1}}],["cairns",{"2":{"13":1}}],["caching",{"2":{"9":1}}],["caches",{"2":{"15":1}}],["cache",{"2":{"0":8,"9":4}}],["called",{"2":{"2":1}}],["calculate",{"2":{"0":1}}],["calculated",{"2":{"0":1}}],["capricorn",{"2":{"0":2}}],["can",{"2":{"0":2,"1":1,"10":2,"17":1}}],["creating",{"2":{"9":1}}],["created",{"2":{"0":1,"9":1}}],["creates",{"2":{"0":1}}],["create",{"2":{"0":4,"15":2}}],["crit",{"2":{"0":3}}],["criteriabounds",{"2":{"0":3}}],["criteria",{"2":{"0":38,"18":1}}],["crs",{"2":{"0":16}}],["col",{"2":{"18":1}}],["column",{"2":{"0":3,"18":2}}],["columns",{"2":{"0":1,"18":1}}],["code",{"2":{"15":1}}],["codehttp",{"2":{"13":1,"14":1}}],["copy",{"2":{"15":1}}],["cooktown",{"2":{"13":1,"14":1}}],["coordinate",{"2":{"0":3}}],["coordinatereferencesystemformat",{"2":{"0":5}}],["coordinates",{"2":{"0":11,"18":1}}],["cog",{"0":{"13":1},"2":{"9":1,"12":1,"16":1}}],["cogs",{"2":{"0":1,"9":1,"12":1,"16":1}}],["com",{"2":{"9":1,"10":2}}],["commands",{"2":{"2":1}}],["compose",{"0":{"4":1,"6":1},"2":{"4":1,"6":1}}],["compiled",{"2":{"7":1}}],["compile",{"2":{"1":1}}],["comparison",{"2":{"0":1}}],["convention",{"2":{"9":1}}],["converted",{"2":{"17":1}}],["convert",{"2":{"0":2}}],["constraint",{"2":{"0":1}}],["constraints",{"2":{"0":1}}],["consideration",{"2":{"0":1}}],["controls",{"2":{"12":1,"16":1}}],["control",{"2":{"0":1}}],["containing",{"2":{"0":19}}],["configuration",{"0":{"10":1},"1":{"11":1},"2":{"0":1}}],["configured",{"2":{"0":2,"10":1,"12":1,"15":1,"16":1}}],["config",{"2":{"0":6,"2":3,"7":1,"9":2,"10":1,"12":2,"15":1,"16":1}}],["count",{"2":{"0":2}}],["corner",{"2":{"0":2}}],["corresponding",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/@localSearchIndexroot.DkOCJlzL.js b/dev/assets/chunks/@localSearchIndexroot.DkOCJlzL.js new file mode 100644 index 0000000..95106c3 --- /dev/null +++ b/dev/assets/chunks/@localSearchIndexroot.DkOCJlzL.js @@ -0,0 +1 @@ +const e='{"documentCount":20,"nextId":20,"documentIds":{"0":"/ReefGuideAPI.jl/dev/api#api","1":"/ReefGuideAPI.jl/dev/docker#Docker-build-and-run","2":"/ReefGuideAPI.jl/dev/docker#Mounting-files-and-required-data","3":"/ReefGuideAPI.jl/dev/docker#To-build-from-src-files-using-Docker","4":"/ReefGuideAPI.jl/dev/docker#To-build-from-src-files-using-Docker-Compose","5":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(launch-server)-using-Docker","6":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(launch-server)-using-Docker-Compose","7":"/ReefGuideAPI.jl/dev/docker#To-run-with-mounted-files-(interactive-shell)-using-Docker","8":"/ReefGuideAPI.jl/dev/getting_started#Getting-Started","9":"/ReefGuideAPI.jl/dev/getting_started#setup","10":"/ReefGuideAPI.jl/dev/getting_started#JWT-Auth-configuration","11":"/ReefGuideAPI.jl/dev/getting_started#Auth-TODOs","12":"/ReefGuideAPI.jl/dev/getting_started#quickstart","13":"/ReefGuideAPI.jl/dev/getting_started#Dynamic-COG-generation","14":"/ReefGuideAPI.jl/dev/getting_started#Simple-Slippy-Tiles","15":"/ReefGuideAPI.jl/dev/getting_started#Development-setup","16":"/ReefGuideAPI.jl/dev/getting_started#Performance-notes","17":"/ReefGuideAPI.jl/dev/getting_started#Reef-edge-alignment-for-site-searching","18":"/ReefGuideAPI.jl/dev/getting_started#Parquet-assessment-additional-setup","19":"/ReefGuideAPI.jl/dev/#reefguideapi-jl"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,634],"1":[4,1,45],"2":[5,4,54],"3":[7,4,7],"4":[8,4,7],"5":[9,4,8],"6":[10,4,6],"7":[9,4,31],"8":[2,1,1],"9":[1,2,93],"10":[3,2,73],"11":[2,5,8],"12":[1,2,95],"13":[3,2,17],"14":[3,2,22],"15":[2,2,71],"16":[2,2,49],"17":[6,2,94],"18":[4,8,51],"19":[2,1,8]},"averageFieldLength":[4.2,2.85,68.7],"storedFields":{"0":{"title":"API","titles":[]},"1":{"title":"Docker build and run","titles":[]},"2":{"title":"Mounting files and required data","titles":["Docker build and run"]},"3":{"title":"To build from src files using Docker","titles":["Docker build and run"]},"4":{"title":"To build from src files using Docker Compose","titles":["Docker build and run"]},"5":{"title":"To run with mounted files (launch server) using Docker","titles":["Docker build and run"]},"6":{"title":"To run with mounted files (launch server) using Docker Compose","titles":["Docker build and run"]},"7":{"title":"To run with mounted files (interactive shell) using Docker","titles":["Docker build and run"]},"8":{"title":"Getting Started","titles":[]},"9":{"title":"Setup","titles":["Getting Started"]},"10":{"title":"JWT Auth configuration","titles":["Getting Started"]},"11":{"title":"Auth TODOs","titles":["Getting Started","JWT Auth configuration"]},"12":{"title":"Quickstart","titles":["Getting Started"]},"13":{"title":"Dynamic COG generation","titles":["Getting Started"]},"14":{"title":"Simple Slippy Tiles","titles":["Getting Started"]},"15":{"title":"Development setup","titles":["Getting Started"]},"16":{"title":"Performance notes","titles":["Getting Started"]},"17":{"title":"Reef edge alignment for site searching","titles":["Getting Started"]},"18":{"title":"Parquet assessment additional setup","titles":["Getting Started","Reef edge alignment for site searching"]},"19":{"title":"ReefGuideAPI.jl","titles":[]}},"dirtCount":0,"index":[["$",{"2":{"15":2}}],["json",{"2":{"10":2}}],["jwks",{"2":{"10":2}}],["jwts",{"2":{"10":1}}],["jwt",{"0":{"10":1},"1":{"11":1},"2":{"10":6}}],["jl",{"0":{"19":1},"2":{"1":2,"2":1,"15":2}}],["julia>",{"2":{"15":2}}],["juliausing",{"2":{"7":1,"12":1}}],["juliawithin",{"2":{"0":1}}],["juliawarmup",{"2":{"0":1}}],["juliavalid",{"2":{"0":2}}],["juliatile",{"2":{"0":1}}],["juliasetup",{"2":{"0":1}}],["juliarotate",{"2":{"0":1}}],["juliaremove",{"2":{"0":1}}],["juliaport",{"2":{"0":1}}],["juliapolygon",{"2":{"0":1}}],["juliaparse",{"2":{"0":1}}],["juliaoutput",{"2":{"0":1}}],["julian",{"2":{"0":1}}],["juliamove",{"2":{"0":1}}],["juliameters",{"2":{"0":1}}],["juliamake",{"2":{"0":1}}],["julialine",{"2":{"0":2}}],["juliainitial",{"2":{"0":2}}],["juliaidentify",{"2":{"0":3}}],["juliaget",{"2":{"0":1}}],["juliagenerate",{"2":{"0":1}}],["juliafrom",{"2":{"0":1}}],["juliafind",{"2":{"0":1}}],["juliafilter",{"2":{"0":3}}],["juliadegrees",{"2":{"0":1}}],["juliacriteria",{"2":{"0":1}}],["juliacreate",{"2":{"0":1}}],["juliaclosest",{"2":{"0":1}}],["juliaassess",{"2":{"0":2}}],["juliaapply",{"2":{"0":1}}],["juliaadjusted",{"2":{"0":1}}],["julia",{"2":{"0":4,"1":1,"7":2,"9":1,"12":1,"15":4}}],["known",{"2":{"10":1}}],["key",{"2":{"10":2}}],["keep",{"2":{"0":3}}],["km",{"2":{"0":1}}],["kilometers",{"2":{"0":1}}],["8",{"2":{"0":1,"12":1,"14":1,"16":1}}],["8000",{"2":{"0":1,"5":2,"13":1,"14":1}}],["7",{"2":{"0":1}}],["7844",{"2":{"0":1}}],["4",{"2":{"0":1,"12":1,"16":1}}],["40",{"2":{"0":2,"13":1,"14":1}}],["5",{"2":{"0":2}}],["qp",{"2":{"0":2}}],["qc",{"2":{"0":1}}],["quickstart",{"0":{"12":1},"2":{"15":1}}],["queries",{"2":{"0":1}}],["query",{"2":{"0":5}}],["quot",{"2":{"0":6,"17":4}}],["quality",{"2":{"0":1}}],["9",{"2":{"0":2,"13":1,"14":1}}],["higher",{"2":{"12":1,"16":1}}],["highest",{"2":{"0":11}}],["how",{"2":{"2":1,"12":1,"16":1}}],["horizontal",{"2":{"0":6}}],["health",{"2":{"11":1}}],["header",{"2":{"10":1}}],["height",{"2":{"0":1}}],["helper",{"2":{"0":1}}],["have",{"2":{"2":2,"17":1}}],["has",{"2":{"1":1}}],["hardcoded",{"2":{"0":1}}],["handle",{"2":{"0":1}}],["https",{"2":{"0":1,"9":1,"10":3}}],["231",{"2":{"14":1}}],["256",{"2":{"9":2}}],["2",{"2":{"0":11,"9":1,"12":1,"16":1}}],["=20000",{"2":{"0":1}}],["=",{"2":{"0":3,"9":6,"10":3,"12":1,"18":2}}],["3",{"2":{"14":1}}],["39",{"2":{"0":3}}],["33",{"2":{"0":3}}],["139",{"2":{"14":1}}],["127",{"2":{"13":1,"14":1}}],["10",{"2":{"12":1,"16":1}}],["1a",{"2":{"9":1}}],["15",{"2":{"0":1,"12":1,"16":1}}],["1",{"2":{"0":2,"9":1,"12":1,"13":1,"14":1}}],["0",{"2":{"0":42,"13":7,"14":9}}],["unsuitable",{"2":{"18":1}}],["unit",{"2":{"0":3}}],["units",{"2":{"0":1}}],["union",{"2":{"0":10}}],["url",{"2":{"13":1,"14":1}}],["ub",{"2":{"0":5}}],["ubs",{"2":{"0":1}}],["ub=",{"2":{"0":1}}],["up",{"2":{"0":3,"4":1,"6":1,"12":2,"16":1}}],["upper",{"2":{"0":3}}],["usual",{"2":{"9":1}}],["use",{"2":{"0":3,"7":1,"9":2,"17":2}}],["used",{"2":{"0":10,"17":1,"18":1}}],["user",{"2":{"0":1,"18":1}}],["using",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":3,"18":1}}],["false",{"2":{"0":1,"9":1,"10":1}}],["far",{"2":{"0":2}}],["further",{"2":{"0":1}}],["function",{"2":{"0":9}}],["fn",{"2":{"0":2}}],["four",{"2":{"12":1,"16":1}}],["found",{"2":{"0":2}}],["following",{"2":{"10":1,"17":1}}],["folder",{"2":{"2":2}}],["form",{"2":{"0":1,"12":1}}],["format",{"2":{"0":2,"10":1,"17":1}}],["for",{"0":{"17":1},"1":{"18":1},"2":{"0":50,"7":1,"10":1,"12":2,"17":1,"18":2,"19":1}}],["first",{"2":{"10":1,"18":1}}],["files",{"0":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":1,"2":3,"9":1}}],["file",{"2":{"0":8,"2":2,"9":3,"15":2}}],["filtered",{"2":{"18":1}}],["filter",{"2":{"0":7}}],["findall",{"2":{"17":1}}],["find",{"2":{"0":4}}],["flats",{"2":{"0":4}}],["flag",{"2":{"0":2}}],["float64=0",{"2":{"0":4}}],["float64=15",{"2":{"0":4}}],["float64",{"2":{"0":43,"18":1}}],["from",{"0":{"3":1,"4":1},"2":{"0":18,"12":1,"16":1,"17":1}}],["vs",{"2":{"15":1}}],["versions",{"2":{"1":1}}],["vertex",{"2":{"0":1,"17":2}}],["vertices",{"2":{"0":1}}],["vertical",{"2":{"0":2}}],["vector",{"2":{"0":26,"17":1}}],["view",{"2":{"1":1}}],["viewing",{"2":{"0":1}}],["via",{"2":{"0":1}}],["v",{"2":{"0":3,"5":1,"7":1}}],["val",{"2":{"0":1}}],["validate",{"2":{"10":1}}],["valid",{"2":{"0":4,"10":1,"18":2}}],["values",{"2":{"0":2,"12":1,"16":1}}],["value",{"2":{"0":2}}],["variables",{"2":{"0":2}}],["vary",{"2":{"0":2}}],["based",{"2":{"18":1}}],["bash$",{"2":{"15":1}}],["bashjulia",{"2":{"12":1}}],["bashdocker",{"2":{"3":1,"4":1,"5":1,"6":1,"7":1}}],["block",{"2":{"9":1}}],["but",{"2":{"12":1,"16":1}}],["build",{"0":{"1":1,"3":1,"4":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":2,"3":1,"4":1}}],["buff",{"2":{"0":3}}],["buffered",{"2":{"0":1,"17":1}}],["buffer",{"2":{"0":13}}],["b",{"2":{"0":2}}],["bitvector",{"2":{"0":1}}],["bitmatrix",{"2":{"0":1}}],["bbox",{"2":{"0":2}}],["by",{"2":{"0":5,"9":1,"17":2}}],["boolean",{"2":{"0":2}}],["bool",{"2":{"0":1,"10":1,"17":1}}],["bottom",{"2":{"0":2}}],["bound",{"2":{"0":3}}],["bounding",{"2":{"0":2}}],["bounds",{"2":{"0":5}}],["box",{"2":{"0":26}}],["been",{"2":{"17":1}}],["best",{"2":{"12":1}}],["bearer",{"2":{"10":1}}],["because",{"2":{"0":1}}],["begin",{"2":{"0":1}}],["before",{"2":{"0":1,"17":1}}],["below",{"2":{"0":1,"2":1,"15":1}}],["between",{"2":{"0":6,"15":1}}],["be",{"2":{"0":7,"1":1,"9":1,"10":3,"12":3,"15":1,"16":2,"17":5,"18":3}}],["purposes",{"2":{"12":1}}],["public",{"2":{"10":2}}],["published",{"2":{"1":1}}],["publish",{"2":{"1":1}}],["please",{"2":{"2":1}}],["planetary",{"2":{"0":1}}],["provided",{"2":{"17":1}}],["provides",{"2":{"10":1}}],["project=",{"2":{"12":1,"15":1}}],["project",{"2":{"9":1,"15":2}}],["processing",{"2":{"17":1}}],["process",{"2":{"1":1}}],["proportion",{"2":{"0":2}}],["preferably",{"2":{"12":1,"16":1}}],["prepped",{"2":{"9":2}}],["prepared",{"2":{"0":1}}],["pre",{"2":{"0":1}}],["pay",{"2":{"10":1}}],["page",{"2":{"1":1,"12":1}}],["packages",{"2":{"1":1}}],["package",{"2":{"1":2,"2":1}}],["path",{"2":{"0":3,"9":1}}],["pair",{"2":{"0":1}}],["parquet",{"0":{"18":1},"2":{"18":1}}],["parallel",{"2":{"12":1}}],["parameters",{"2":{"0":2}}],["parsed",{"2":{"0":1}}],["parse",{"2":{"0":2}}],["parses",{"2":{"0":1}}],["p",{"2":{"0":2,"5":1}}],["possibly",{"2":{"17":1}}],["positions",{"2":{"0":3}}],["positive",{"2":{"0":1}}],["port",{"2":{"0":4}}],["potential",{"2":{"0":8,"17":2,"18":1}}],["points",{"2":{"0":5}}],["point",{"2":{"0":11}}],["polygons",{"2":{"0":10,"17":4}}],["polygon",{"2":{"0":25,"17":2}}],["perform",{"2":{"0":5}}],["performance",{"0":{"16":1},"2":{"0":1,"12":1}}],["per",{"2":{"0":6}}],["pixel",{"2":{"0":25,"17":1}}],["pixels",{"2":{"0":25,"17":3,"18":3}}],["pix",{"2":{"0":2}}],["environment",{"2":{"15":1}}],["environmental",{"2":{"0":2}}],["enviroment",{"2":{"15":1}}],["env",{"2":{"12":1}}],["ensure",{"2":{"11":1}}],["enabled",{"2":{"10":1}}],["enable",{"2":{"10":1,"12":1}}],["entrypoint=",{"2":{"7":1}}],["endpoints",{"2":{"10":1}}],["endpoint",{"2":{"0":1,"10":2}}],["epsg",{"2":{"0":3}}],["exactly",{"2":{"10":1}}],["examples",{"2":{"0":1}}],["example",{"2":{"0":1,"13":1,"14":1}}],["expected",{"2":{"10":1}}],["expect",{"2":{"10":1}}],["extract",{"2":{"0":1}}],["extent",{"2":{"0":2}}],["excludes",{"2":{"2":1}}],["exclude",{"2":{"0":1}}],["excluded",{"2":{"0":1}}],["exists",{"2":{"0":3}}],["edges",{"2":{"0":6,"17":2,"18":1}}],["edge",{"0":{"17":1},"1":{"18":1},"2":{"0":17,"17":2}}],["each",{"2":{"0":17}}],["east",{"2":{"0":1}}],["e",{"2":{"0":4,"7":1,"15":1,"17":1,"18":1}}],["dynamic",{"0":{"13":1}}],["downtime",{"2":{"15":1}}],["do",{"2":{"12":1,"16":1}}],["dockerfile",{"2":{"1":1}}],["docker",{"0":{"1":1,"3":1,"4":1,"5":1,"6":1,"7":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":1,"2":1}}],["due",{"2":{"2":1}}],["df",{"2":{"0":6}}],["development",{"0":{"15":1}}],["dev",{"2":{"12":1,"15":3}}],["debug",{"2":{"9":2,"12":2}}],["defined",{"2":{"9":1}}],["defaults",{"2":{"9":2}}],["default=0",{"2":{"0":1}}],["default",{"2":{"0":6,"15":1,"18":1}}],["deg",{"2":{"0":1}}],["degrees",{"2":{"0":11}}],["degree",{"2":{"0":11}}],["depth=",{"2":{"0":1,"13":1,"14":1}}],["desired",{"2":{"0":3}}],["displays",{"2":{"9":1,"12":1}}],["disables",{"2":{"9":1}}],["distance",{"2":{"0":6}}],["distances",{"2":{"0":2}}],["dist",{"2":{"0":25}}],["directory",{"2":{"0":2,"2":1,"15":1}}],["direction",{"2":{"0":2}}],["dir",{"2":{"0":3,"9":3}}],["diminishing",{"2":{"12":1,"16":1}}],["dimension",{"2":{"0":2}}],["dimensions",{"2":{"0":2}}],["dims",{"2":{"0":1}}],["different",{"2":{"0":1}}],["dictionary",{"2":{"0":1}}],["dict",{"2":{"0":6,"18":1}}],["datasets>",{"2":{"9":1}}],["dataset",{"2":{"9":1}}],["dataframe",{"2":{"0":34}}],["data",{"0":{"2":1},"2":{"0":22,"2":4,"5":2,"7":3,"9":4,"15":2}}],["root",{"2":{"15":2}}],["route",{"2":{"11":1}}],["rotating",{"2":{"0":1}}],["rotation",{"2":{"0":19}}],["rotations",{"2":{"0":13,"17":1}}],["rotated",{"2":{"0":2}}],["rotate",{"2":{"0":5}}],["rot",{"2":{"0":9}}],["rm",{"2":{"7":1}}],["running",{"2":{"2":1}}],["run",{"0":{"1":1,"5":1,"6":1,"7":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"1":1,"5":1,"7":1}}],["rugosity",{"2":{"0":4}}],["rugosity=0",{"2":{"0":1,"14":1}}],["ruleset",{"2":{"0":8}}],["range",{"2":{"12":1,"16":1}}],["rather",{"2":{"0":2,"17":1}}],["rast",{"2":{"0":3}}],["rasters",{"2":{"0":2}}],["rasterstack",{"2":{"0":9}}],["raster",{"2":{"0":24,"17":3}}],["rtype=slopes",{"2":{"14":1}}],["rtype",{"2":{"0":3}}],["right",{"2":{"0":2}}],["rst",{"2":{"0":10}}],["repl",{"2":{"15":1}}],["repository",{"2":{"1":1}}],["revise",{"2":{"15":1}}],["ready",{"2":{"7":1}}],["reaching",{"2":{"0":1}}],["reduce",{"2":{"0":1,"12":1,"15":1,"16":1}}],["remove",{"2":{"0":2}}],["require",{"2":{"17":1}}],["requires",{"2":{"2":1}}],["required",{"0":{"2":1},"2":{"0":3,"2":2,"17":1}}],["request",{"2":{"0":2}}],["requested",{"2":{"0":5,"12":1,"16":1}}],["reg",{"2":{"0":4}}],["region=cairns",{"2":{"14":1}}],["regional",{"2":{"0":4,"9":2}}],["regionalcriteria",{"2":{"0":3}}],["region",{"2":{"0":20,"17":1}}],["restart",{"2":{"15":1}}],["resolvable",{"2":{"10":1}}],["resolution",{"2":{"0":4}}],["res",{"2":{"0":7}}],["results",{"2":{"0":2}}],["result",{"2":{"0":1}}],["resampled",{"2":{"0":2}}],["resample",{"2":{"0":1}}],["reference",{"2":{"0":1}}],["reload",{"2":{"15":1}}],["rel",{"2":{"0":2}}],["reefguide",{"2":{"3":2,"4":1,"5":2,"6":1,"7":3}}],["reefguideapi",{"0":{"19":1},"2":{"0":42,"1":2,"2":1,"7":3,"12":3}}],["reefs",{"2":{"0":1}}],["reeftype",{"2":{"0":1}}],["reef",{"0":{"17":1},"1":{"18":1},"2":{"0":35,"9":1,"17":7,"19":1}}],["retaining",{"2":{"0":1}}],["return",{"2":{"0":2,"10":1,"17":1}}],["returned",{"2":{"0":2}}],["returns",{"2":{"0":26,"12":1,"16":1}}],["retrieved",{"2":{"10":1}}],["retrieve",{"2":{"0":5}}],["nautical",{"2":{"0":1}}],["named",{"2":{"2":1,"9":1}}],["namedtuple",{"2":{"0":2}}],["name",{"2":{"0":4,"17":1}}],["names=depth",{"2":{"0":1}}],["names",{"2":{"0":2}}],["nm",{"2":{"0":2}}],["now",{"2":{"15":1}}],["note",{"2":{"2":1,"9":1,"15":1}}],["notes",{"0":{"16":1},"2":{"0":3}}],["not",{"2":{"0":1,"11":1}}],["nothing",{"2":{"0":2}}],["no",{"2":{"0":1}}],["north",{"2":{"0":1}}],["number",{"2":{"0":6,"9":1}}],["n",{"2":{"0":9}}],["necessary",{"2":{"15":1}}],["needing",{"2":{"1":1}}],["new",{"2":{"0":3}}],["negative",{"2":{"0":1}}],["neighbor",{"2":{"0":1}}],["nearest",{"2":{"0":5,"17":1}}],["mkdir",{"2":{"15":1}}],["mpa",{"2":{"9":2}}],["multiple",{"2":{"12":1}}],["multipolygon",{"2":{"0":1}}],["must",{"2":{"0":2,"18":2}}],["mode",{"2":{"9":1}}],["mounted",{"0":{"5":1,"6":1,"7":1}}],["mounting",{"0":{"2":1}}],["move",{"2":{"0":3}}],["most",{"2":{"0":2}}],["miles",{"2":{"0":1}}],["middleware",{"2":{"0":3}}],["min",{"2":{"0":4}}],["messages",{"2":{"12":1}}],["mentioned",{"2":{"2":1}}],["means",{"2":{"1":1}}],["memory",{"2":{"0":1}}],["method",{"2":{"0":2,"17":1}}],["meters",{"2":{"0":9}}],["met",{"2":{"0":1}}],["meet",{"2":{"0":1}}],["main",{"2":{"12":1}}],["maintaining",{"2":{"0":1}}],["many",{"2":{"12":1,"16":1}}],["management",{"2":{"0":4,"17":1}}],["make",{"2":{"0":2}}],["matching",{"2":{"17":1}}],["match",{"2":{"0":2,"10":1}}],["matrix",{"2":{"0":2}}],["mackay",{"2":{"0":2}}],["map",{"2":{"0":4}}],["mapping",{"2":{"0":1}}],["masks",{"2":{"0":2}}],["masking",{"2":{"0":2,"18":1}}],["masked",{"2":{"0":1,"17":1}}],["mask",{"2":{"0":13}}],["may",{"2":{"0":1}}],["maximum",{"2":{"0":1}}],["maxmimum",{"2":{"0":1}}],["max",{"2":{"0":6}}],["works",{"2":{"17":1}}],["working",{"2":{"2":1}}],["wkt",{"2":{"10":4}}],["web",{"2":{"10":1}}],["well",{"2":{"10":1}}],["we",{"2":{"0":1,"2":1}}],["west",{"2":{"0":1}}],["way",{"2":{"9":1}}],["want",{"2":{"0":1}}],["warm",{"2":{"0":1}}],["warmup",{"2":{"0":1}}],["was",{"2":{"0":1}}],["width",{"2":{"0":1}}],["will",{"2":{"0":2,"1":1,"7":1,"12":2,"15":1,"16":1}}],["without",{"2":{"1":1}}],["within",{"2":{"0":7,"18":1}}],["with",{"0":{"5":1,"6":1,"7":1},"2":{"0":12,"1":1,"2":1,"12":3,"16":2,"17":2}}],["writing",{"2":{"0":2,"12":1,"16":1}}],["writes",{"2":{"0":1}}],["write",{"2":{"0":2,"12":2,"16":2}}],["wrappers",{"2":{"0":7}}],["why",{"2":{"0":1}}],["whitsunday",{"2":{"17":2}}],["which",{"2":{"0":2,"10":2}}],["while",{"2":{"0":1}}],["when",{"2":{"0":5,"2":1,"9":1,"12":1,"16":1}}],["where",{"2":{"0":13,"7":1,"10":1}}],["optional",{"2":{"9":3}}],["open",{"2":{"9":1}}],["opperating",{"2":{"0":1}}],["overlapping",{"2":{"0":1}}],["outline",{"2":{"0":3}}],["outlines",{"2":{"0":5}}],["output",{"2":{"0":9}}],["out",{"2":{"0":6,"12":1,"16":1}}],["outside",{"2":{"0":2}}],["ones",{"2":{"0":2}}],["one",{"2":{"0":3,"12":1}}],["only",{"2":{"0":4,"17":1}}],["on",{"2":{"0":2,"1":1,"18":1}}],["object",{"2":{"0":3}}],["obtain",{"2":{"0":3}}],["ordereddict",{"2":{"0":1}}],["order",{"2":{"0":1}}],["or",{"2":{"0":8,"17":2}}],["original",{"2":{"0":1}}],["orig",{"2":{"0":1}}],["of",{"2":{"0":62,"1":2,"2":1,"9":2,"17":4}}],["ideally",{"2":{"12":1,"16":1}}],["identifies",{"2":{"0":2}}],["identified",{"2":{"0":7}}],["identifying",{"2":{"17":2}}],["identify",{"2":{"0":9,"17":2,"18":1}}],["image",{"2":{"1":1}}],["imagerylayer",{"2":{"0":1}}],["its",{"2":{"0":1,"12":1}}],["it",{"2":{"0":1,"1":1,"2":1,"15":1}}],["if",{"2":{"0":3,"12":1}}],["issuer",{"2":{"10":4}}],["iss",{"2":{"10":2}}],["is",{"2":{"0":17,"2":2,"7":1,"9":1,"11":1,"15":1,"17":1}}],["inaccurate",{"2":{"17":1}}],["infiltrator",{"2":{"15":1}}],["info",{"2":{"9":1,"12":1}}],["include",{"2":{"2":1,"15":1}}],["includes",{"2":{"0":1}}],["instantiate",{"2":{"9":1}}],["instance",{"2":{"1":1}}],["installation",{"2":{"1":1}}],["invokes",{"2":{"0":1}}],["inds",{"2":{"0":2}}],["individual",{"2":{"0":1}}],["indices",{"2":{"0":5,"17":2}}],["indicate",{"2":{"0":4}}],["indicates",{"2":{"0":1}}],["indicated",{"2":{"0":2}}],["indicating",{"2":{"0":5,"9":1}}],["index",{"2":{"0":1}}],["initially",{"2":{"15":1}}],["initialize",{"2":{"9":1}}],["initial",{"2":{"0":12}}],["input",{"2":{"0":9,"2":1}}],["in",{"2":{"0":35,"2":4,"9":2,"10":1,"12":1,"15":2,"17":1,"18":1}}],["into",{"2":{"17":1}}],["intended",{"2":{"0":5}}],["interactive",{"0":{"7":1},"2":{"7":1,"12":1}}],["intersect",{"2":{"0":2}}],["interpolation",{"2":{"0":1}}],["int",{"2":{"0":7}}],["int64=1",{"2":{"0":1}}],["int64=2",{"2":{"0":3}}],["int64",{"2":{"0":15}}],["zeros",{"2":{"0":2}}],["zero",{"2":{"0":4}}],["z",{"2":{"0":4}}],["zoom",{"2":{"0":2}}],["your",{"2":{"2":1}}],["you",{"2":{"1":2,"2":1,"15":1}}],["ys",{"2":{"0":1}}],["y",{"2":{"0":18}}],["x26",{"2":{"13":1,"14":4}}],["xs",{"2":{"0":1}}],["x3c",{"2":{"0":4,"9":2}}],["x",{"2":{"0":21}}],["go",{"2":{"17":1}}],["guidance",{"2":{"9":1}}],["gbr",{"2":{"9":1}}],["gbrmpa",{"2":{"0":2,"17":1}}],["generation",{"0":{"13":1}}],["generating",{"2":{"0":2}}],["generate",{"2":{"0":3}}],["getting",{"0":{"8":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"2":1}}],["get",{"2":{"0":1}}],["geojson",{"2":{"0":6}}],["geodataframe",{"2":{"0":4,"18":2}}],["geotiff",{"2":{"0":1}}],["geotiffs>",{"2":{"9":1}}],["geotiffs",{"2":{"0":1}}],["geoformattypes",{"2":{"0":7}}],["geometries",{"2":{"17":1}}],["geometry",{"2":{"0":11,"18":3}}],["geometrybasics",{"2":{"0":7}}],["geom",{"2":{"0":20}}],["greater",{"2":{"0":1}}],["gt",{"2":{"0":1,"10":1}}],["gdal",{"2":{"0":3}}],["gda2020",{"2":{"0":1}}],["gdf",{"2":{"0":14}}],["github",{"2":{"9":1}}],["giwrap",{"2":{"0":3}}],["gi",{"2":{"0":7,"18":1}}],["given",{"2":{"0":8}}],["globe",{"2":{"0":1}}],["g",{"2":{"0":4,"7":1,"15":1,"17":1,"18":1}}],["avoid",{"2":{"17":1}}],["available",{"2":{"2":1,"12":1}}],["away",{"2":{"17":1}}],["added",{"2":{"18":1}}],["additional",{"0":{"18":1}}],["additionally",{"2":{"10":1}}],["add",{"2":{"10":1,"15":1}}],["adjacent",{"2":{"0":1}}],["adjusted",{"2":{"0":1}}],["authorised",{"2":{"11":1}}],["authorization",{"2":{"10":1}}],["auth",{"0":{"10":1,"11":1},"1":{"11":1},"2":{"10":2}}],["aims",{"2":{"9":1}}],["act",{"2":{"0":1}}],["according",{"2":{"0":2}}],["account",{"2":{"0":1}}],["able",{"2":{"0":1,"1":1}}],["about",{"2":{"0":1}}],["abs",{"2":{"0":1}}],["amp",{"2":{"0":4}}],["attention",{"2":{"10":1}}],["attempts",{"2":{"0":1}}],["at",{"2":{"0":7,"12":2,"15":1,"16":1}}],["alignment",{"0":{"17":1},"1":{"18":1}}],["align",{"2":{"0":3,"17":1}}],["aligns",{"2":{"0":1}}],["all",{"2":{"0":2}}],["an",{"2":{"0":4,"1":2,"19":1}}],["analysis",{"2":{"0":4}}],["anticlockwise",{"2":{"0":3}}],["anti",{"2":{"0":1}}],["angle",{"2":{"0":17,"17":1}}],["and",{"0":{"1":1,"2":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":35,"1":1,"2":1,"7":1,"9":1,"10":2,"15":2,"17":2,"18":3}}],["assuming",{"2":{"15":1}}],["assumes",{"2":{"15":1}}],["assumed",{"2":{"2":1}}],["associated",{"2":{"1":1}}],["assessed",{"2":{"0":1}}],["assesses",{"2":{"0":1}}],["assessing",{"2":{"0":1}}],["assessments",{"2":{"19":1}}],["assessment",{"0":{"18":1},"2":{"0":5,"9":1}}],["assess",{"2":{"0":9,"13":1}}],["as",{"2":{"0":4,"2":1,"17":1,"18":2}}],["argument",{"2":{"0":1}}],["arguments",{"2":{"0":22}}],["around",{"2":{"0":8}}],["are",{"2":{"0":12,"9":1,"12":1,"15":1}}],["area",{"2":{"0":3,"17":1}}],["applications",{"2":{"0":1}}],["applied",{"2":{"0":6}}],["apply",{"2":{"0":11}}],["approach",{"2":{"0":1}}],["appear",{"2":{"0":1}}],["api",{"0":{"0":1},"2":{"10":2,"19":1}}],["a",{"2":{"0":41,"1":1,"2":3,"7":1,"9":1,"10":2,"12":2,"15":2,"17":1,"18":2}}],["testing",{"2":{"12":1}}],["tested",{"2":{"12":1,"16":1}}],["tty",{"2":{"7":1}}],["typically",{"2":{"0":1}}],["types",{"2":{"0":1}}],["type",{"2":{"0":5}}],["take",{"2":{"0":1}}],["targetted",{"2":{"0":1}}],["target",{"2":{"0":27,"3":1,"17":2}}],["two",{"2":{"0":2}}],["true",{"2":{"0":3,"10":2}}],["translates",{"2":{"0":1}}],["tip",{"2":{"12":1}}],["tiff",{"2":{"9":1}}],["times",{"2":{"0":2,"12":2,"16":2}}],["tiles",{"0":{"14":1},"2":{"0":3}}],["tile",{"2":{"0":19,"9":2,"14":1}}],["thread",{"2":{"12":1}}],["threads=4",{"2":{"12":1}}],["threads",{"2":{"0":3,"9":2,"12":4,"16":3}}],["threshold",{"2":{"0":10}}],["thresholds",{"2":{"0":17,"18":2}}],["than",{"2":{"0":3,"17":1}}],["that",{"2":{"0":17,"15":1,"17":2}}],["this",{"2":{"0":2,"1":1,"2":1,"7":1,"9":1,"12":1,"16":1,"17":2}}],["these",{"2":{"2":1,"9":1}}],["theshold",{"2":{"0":1}}],["their",{"2":{"0":2,"17":1}}],["the",{"2":{"0":85,"1":5,"2":6,"9":5,"10":9,"12":2,"15":10,"16":1,"17":4,"18":4}}],["tuples",{"2":{"0":2}}],["tuple",{"2":{"0":19}}],["t",{"2":{"0":23,"3":1}}],["todos",{"0":{"11":1}}],["token",{"2":{"10":1}}],["toml",{"2":{"0":1,"2":2,"7":1,"9":3,"10":2,"12":1,"15":1}}],["townsville",{"2":{"0":2,"17":2}}],["too",{"2":{"0":1}}],["top",{"2":{"0":4}}],["to",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":79,"1":2,"2":2,"9":7,"10":4,"12":5,"15":7,"16":4,"17":5,"18":1}}],["lb",{"2":{"0":5}}],["lbs",{"2":{"0":1}}],["lb=",{"2":{"0":1}}],["launches",{"2":{"15":1}}],["launch",{"0":{"5":1,"6":1},"2":{"2":1}}],["layer",{"2":{"0":1}}],["labelling",{"2":{"0":1}}],["latest",{"2":{"1":1}}],["later",{"2":{"0":1}}],["latitudinal",{"2":{"0":1}}],["latitude",{"2":{"0":4}}],["lats",{"2":{"0":1}}],["lat",{"2":{"0":25,"18":1}}],["list",{"2":{"0":2}}],["line",{"2":{"0":18}}],["lines",{"2":{"0":13,"17":3}}],["lt",{"2":{"0":1,"10":1}}],["least",{"2":{"12":2,"16":1}}],["leading",{"2":{"9":1}}],["lengths",{"2":{"0":2}}],["length",{"2":{"0":7}}],["level",{"2":{"0":1}}],["left",{"2":{"0":4}}],["logs",{"2":{"9":1}}],["locally",{"2":{"2":1,"12":1,"16":1}}],["local",{"2":{"1":1}}],["located",{"2":{"0":1}}],["locations",{"2":{"0":8}}],["location",{"2":{"0":4,"9":3}}],["loaded",{"2":{"0":1,"15":1,"18":1}}],["load",{"2":{"0":1}}],["low",{"2":{"0":1}}],["lower",{"2":{"0":3}}],["lookup",{"2":{"0":6}}],["lonlat",{"2":{"0":2}}],["lons",{"2":{"0":1}}],["longitudinal",{"2":{"0":1}}],["longitude",{"2":{"0":2}}],["long",{"2":{"0":2}}],["lon",{"2":{"0":20,"18":2}}],["save",{"2":{"15":1}}],["sandbox",{"2":{"15":8}}],["same",{"2":{"0":1,"18":1}}],["slippy",{"0":{"14":1}}],["slope=0",{"2":{"0":1,"13":1,"14":1}}],["slopes",{"2":{"0":4,"13":1}}],["slope",{"2":{"0":1}}],["script",{"2":{"9":1}}],["scoring",{"2":{"0":6}}],["scores",{"2":{"0":2}}],["score",{"2":{"0":7}}],["shell",{"0":{"7":1},"2":{"7":1}}],["should",{"2":{"0":2,"9":1,"10":2,"12":1,"16":1,"17":4,"18":1}}],["src",{"0":{"3":1,"4":1},"2":{"3":1,"4":1,"6":1}}],["spatial",{"2":{"15":2}}],["spun",{"2":{"12":1}}],["spin",{"2":{"0":1}}],["specified",{"2":{"0":3,"17":2,"18":1}}],["skip",{"2":{"0":1}}],["s",{"2":{"0":2}}],["symbol",{"2":{"0":4}}],["system",{"2":{"0":1}}],["supporting",{"2":{"19":1}}],["suitabiltiy",{"2":{"0":1}}],["suitability",{"2":{"0":5,"19":1}}],["suitable",{"2":{"0":5}}],["surr",{"2":{"0":7}}],["session",{"2":{"15":1}}],["seconds",{"2":{"12":1,"16":1}}],["second",{"2":{"10":1}}],["server",{"0":{"5":1,"6":1},"2":{"2":1,"7":1,"9":1,"12":2,"15":4}}],["separate",{"2":{"0":2}}],["segments",{"2":{"0":3}}],["seem",{"2":{"12":1,"16":1}}],["see",{"2":{"0":2}}],["searching",{"0":{"17":1},"1":{"18":1},"2":{"0":4}}],["search",{"2":{"0":40,"17":4}}],["setting",{"2":{"12":1,"16":1}}],["settings",{"2":{"0":1}}],["setup",{"0":{"9":1,"15":1,"18":1},"2":{"0":1}}],["sets",{"2":{"0":1}}],["set",{"2":{"0":3,"2":1,"12":1,"16":1}}],["simplify",{"2":{"17":1}}],["simplified",{"2":{"17":3}}],["simple",{"0":{"14":1},"2":{"0":1,"12":1}}],["similar",{"2":{"0":1}}],["side",{"2":{"0":15}}],["sites",{"2":{"0":14,"17":2,"18":1}}],["site",{"0":{"17":1},"1":{"18":1},"2":{"0":15}}],["size",{"2":{"0":6,"9":2}}],["so",{"2":{"0":1}}],["somewhere",{"2":{"0":1}}],["some",{"2":{"0":1,"9":3}}],["south",{"2":{"0":1}}],["source",{"2":{"0":42}}],["state",{"2":{"12":1}}],["standardise",{"2":{"0":1}}],["started",{"0":{"8":1},"1":{"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"2":1}}],["starting",{"2":{"0":3}}],["start",{"2":{"0":5,"7":2,"12":2,"15":1}}],["stack",{"2":{"0":8}}],["steps",{"2":{"0":1,"15":1}}],["step",{"2":{"0":11,"9":1}}],["still",{"2":{"0":1}}],["string=",{"2":{"0":1}}],["string",{"2":{"0":10}}],["small",{"2":{"0":1}}],["chairmarks",{"2":{"15":1}}],["check",{"2":{"11":1}}],["cd",{"2":{"15":2}}],["c",{"2":{"9":1}}],["ctype",{"2":{"0":1}}],["claim",{"2":{"10":1}}],["client",{"2":{"0":1}}],["closest",{"2":{"0":5,"17":1}}],["clockwise",{"2":{"0":6}}],["centroid",{"2":{"0":4}}],["center",{"2":{"0":3}}],["centered",{"2":{"0":1}}],["custom",{"2":{"0":2}}],["current",{"2":{"12":1}}],["currently",{"2":{"0":3,"2":1,"9":1,"17":1}}],["curvature",{"2":{"0":1}}],["cartesianindices",{"2":{"17":1}}],["cairns",{"2":{"13":1}}],["caching",{"2":{"9":1}}],["caches",{"2":{"15":1}}],["cache",{"2":{"0":8,"9":4}}],["called",{"2":{"2":1}}],["calculate",{"2":{"0":1}}],["calculated",{"2":{"0":1}}],["capricorn",{"2":{"0":2}}],["can",{"2":{"0":2,"1":1,"10":2,"17":1}}],["creating",{"2":{"9":1}}],["created",{"2":{"0":1,"9":1}}],["creates",{"2":{"0":1}}],["create",{"2":{"0":4,"15":2}}],["crit",{"2":{"0":3}}],["criteriabounds",{"2":{"0":3}}],["criteria",{"2":{"0":38,"18":1}}],["crs",{"2":{"0":16}}],["col",{"2":{"18":1}}],["column",{"2":{"0":3,"18":2}}],["columns",{"2":{"0":1,"18":1}}],["code",{"2":{"15":1}}],["codehttp",{"2":{"13":1,"14":1}}],["copy",{"2":{"15":1}}],["cooktown",{"2":{"13":1,"14":1}}],["coordinatereferencesystemformat",{"2":{"0":5}}],["coordinate",{"2":{"0":3}}],["coordinates",{"2":{"0":10,"18":1}}],["cog",{"0":{"13":1},"2":{"9":1,"12":1,"16":1}}],["cogs",{"2":{"0":1,"9":1,"12":1,"16":1}}],["com",{"2":{"9":1,"10":2}}],["commands",{"2":{"2":1}}],["compose",{"0":{"4":1,"6":1},"2":{"4":1,"6":1}}],["compiled",{"2":{"7":1}}],["compile",{"2":{"1":1}}],["comparison",{"2":{"0":1}}],["convention",{"2":{"9":1}}],["converted",{"2":{"17":1}}],["convert",{"2":{"0":2}}],["constraint",{"2":{"0":1}}],["constraints",{"2":{"0":1}}],["consideration",{"2":{"0":1}}],["controls",{"2":{"12":1,"16":1}}],["control",{"2":{"0":1}}],["containing",{"2":{"0":19}}],["configuration",{"0":{"10":1},"1":{"11":1},"2":{"0":1}}],["configured",{"2":{"0":2,"10":1,"12":1,"15":1,"16":1}}],["config",{"2":{"0":6,"2":3,"7":1,"9":2,"10":1,"12":2,"15":1,"16":1}}],["count",{"2":{"0":2}}],["corner",{"2":{"0":2}}],["corresponding",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/VPLocalSearchBox.BO9Crzas.js b/dev/assets/chunks/VPLocalSearchBox.lx_FSht0.js similarity index 99% rename from dev/assets/chunks/VPLocalSearchBox.BO9Crzas.js rename to dev/assets/chunks/VPLocalSearchBox.lx_FSht0.js index 47aba65..37e18ac 100644 --- a/dev/assets/chunks/VPLocalSearchBox.BO9Crzas.js +++ b/dev/assets/chunks/VPLocalSearchBox.lx_FSht0.js @@ -1,4 +1,4 @@ -var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Re=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,p as se,h as pe,aj as Xe,ak as Rt,al as Ct,q as je,am as Mt,d as At,D as ye,an as et,ao as Lt,ap as Dt,s as zt,aq as Pt,v as Ce,P as ue,O as we,ar as jt,as as Vt,W as $t,R as Bt,$ as Wt,o as q,b as Kt,j as S,a0 as Jt,k as D,at as Ut,au as qt,av as Gt,c as Y,n as tt,e as xe,C as st,F as nt,a as de,t as he,aw as Ht,ax as it,ay as Qt,a9 as Yt,af as Zt,az as Xt,_ as es}from"./framework.BvdfcH24.js";import{u as ts,c as ss}from"./theme._B5YJXUN.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.BIq-6JjD.js"),[])};/*! +var Nt=Object.defineProperty;var Ft=(a,e,t)=>e in a?Nt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Re=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{V as Ot,p as se,h as pe,aj as Xe,ak as Rt,al as Ct,q as je,am as Mt,d as At,D as ye,an as et,ao as Lt,ap as Dt,s as zt,aq as Pt,v as Ce,P as ue,O as we,ar as jt,as as Vt,W as $t,R as Bt,$ as Wt,o as q,b as Kt,j as S,a0 as Jt,k as D,at as Ut,au as qt,av as Gt,c as Y,n as tt,e as xe,C as st,F as nt,a as de,t as he,aw as Ht,ax as it,ay as Qt,a9 as Yt,af as Zt,az as Xt,_ as es}from"./framework.DT0TDSCa.js";import{u as ts,c as ss}from"./theme.Db56iT4S.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.DkOCJlzL.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var vt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ie=vt.join(","),mt=typeof Element>"u",ie=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,ke=!mt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Ne=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},is=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},gt=function(e,t,s){if(Ne(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ie));return t&&ie.call(e,Ie)&&n.unshift(e),n=n.filter(s),n},bt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!Ne(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=a(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=ie.call(i,Ie);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var v=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),p=!Ne(v,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(v&&p){var b=a(v===!0?i.children:v.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ne=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||is(e))&&!yt(e)?0:e.tabIndex},rs=function(e,t){var s=ne(e);return s<0&&t&&!yt(e)?0:s},as=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},os=function(e){return wt(e)&&e.type==="hidden"},ls=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},cs=function(e,t){for(var s=0;ssummary:first-of-type"),i=r?e.parentElement:e;if(ie.call(i,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="legacy-full"){if(typeof n=="function"){for(var o=e;e;){var l=e.parentElement,c=ke(e);if(l&&!l.shadowRoot&&n(l)===!0)return rt(e);e.assignedSlot?e=e.assignedSlot:!l&&c!==e.ownerDocument?e=c.host:e=l}e=o}if(fs(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return rt(e);return!1},vs=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},gs=function a(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=rs(o,i),c=i?a(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(as).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},bs=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:Ve.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:ms}):s=gt(e,t.includeContainer,Ve.bind(null,t)),gs(s)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:Fe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=gt(e,t.includeContainer,Fe.bind(null,t)),s},re=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ie.call(e,Ie)===!1?!1:Ve(t,e)},ws=vt.concat("iframe").join(","),Me=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ie.call(e,ws)===!1?!1:Fe(t,e)};/*! diff --git a/dev/assets/chunks/framework.BvdfcH24.js b/dev/assets/chunks/framework.BvdfcH24.js deleted file mode 100644 index 8b21493..0000000 --- a/dev/assets/chunks/framework.BvdfcH24.js +++ /dev/null @@ -1,18 +0,0 @@ -/** -* @vue/shared v3.5.10 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function Hs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Z={},Ct=[],Ue=()=>{},Jo=()=>!1,Zt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$s=e=>e.startsWith("onUpdate:"),fe=Object.assign,Ds=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Qo=Object.prototype.hasOwnProperty,J=(e,t)=>Qo.call(e,t),K=Array.isArray,At=e=>Fn(e)==="[object Map]",ui=e=>Fn(e)==="[object Set]",q=e=>typeof e=="function",re=e=>typeof e=="string",st=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",di=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),hi=Object.prototype.toString,Fn=e=>hi.call(e),Zo=e=>Fn(e).slice(8,-1),pi=e=>Fn(e)==="[object Object]",js=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Rt=Hs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Hn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},el=/-(\w)/g,Ie=Hn(e=>e.replace(el,(t,n)=>n?n.toUpperCase():"")),tl=/\B([A-Z])/g,rt=Hn(e=>e.replace(tl,"-$1").toLowerCase()),$n=Hn(e=>e.charAt(0).toUpperCase()+e.slice(1)),wn=Hn(e=>e?`on${$n(e)}`:""),tt=(e,t)=>!Object.is(e,t),Sn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},ws=e=>{const t=parseFloat(e);return isNaN(t)?e:t},nl=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let hr;const mi=()=>hr||(hr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Vs(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(rl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Us(e){let t="";if(re(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),al=e=>re(e)?e:e==null?"":K(e)||ne(e)&&(e.toString===hi||!q(e.toString))?vi(e)?al(e.value):JSON.stringify(e,bi,2):String(e),bi=(e,t)=>vi(t)?bi(e,t.value):At(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Zn(s,i)+" =>"]=r,n),{})}:ui(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Zn(n))}:st(t)?Zn(t):ne(t)&&!K(t)&&!pi(t)?String(t):t,Zn=(e,t="")=>{var n;return st(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.10 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let _e;class fl{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;let e;for(;xt;){let t=xt,n;for(;t;)t.flags&1||(t.flags&=-9),t=t.next;for(t=xt,xt=void 0;t;){if(n=t.next,t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function xi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ti(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Ws(s),dl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ss(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ci(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ci(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Wt))return;e.globalVersion=Wt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Ss(e)){e.flags&=-3;return}const n=te,s=Ne;te=e,Ne=!0;try{xi(e);const r=e.fn(e._value);(t.version===0||tt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{te=n,Ne=s,Ti(e),e.flags&=-3}}function Ws(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s),!n.subs&&n.computed){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ws(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function dl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const Ai=[];function it(){Ai.push(Ne),Ne=!1}function ot(){const e=Ai.pop();Ne=e===void 0?!0:e}function pr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=te;te=void 0;try{t()}finally{te=n}}}let Wt=0;class hl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Dn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.target=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!te||!Ne||te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==te)n=this.activeLink=new hl(te,this),te.deps?(n.prevDep=te.depsTail,te.depsTail.nextDep=n,te.depsTail=n):te.deps=te.depsTail=n,Ri(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=te.depsTail,n.nextDep=void 0,te.depsTail.nextDep=n,te.depsTail=n,te.deps===n&&(te.deps=s)}return n}trigger(t){this.version++,Wt++,this.notify(t)}notify(t){Bs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ks()}}}function Ri(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ri(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Rn=new WeakMap,ht=Symbol(""),Es=Symbol(""),Kt=Symbol("");function ve(e,t,n){if(Ne&&te){let s=Rn.get(e);s||Rn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Dn),r.target=e,r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=Rn.get(e);if(!o){Wt++;return}const l=c=>{c&&c.trigger()};if(Bs(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&js(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,g)=>{(g==="length"||g===Kt||!st(g)&&g>=a)&&l(h)})}else switch(n!==void 0&&l(o.get(n)),f&&l(o.get(Kt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(ht)),At(e)&&l(o.get(Es)));break;case"delete":c||(l(o.get(ht)),At(e)&&l(o.get(Es)));break;case"set":At(e)&&l(o.get(ht));break}}ks()}function pl(e,t){const n=Rn.get(e);return n&&n.get(t)}function _t(e){const t=z(e);return t===e?t:(ve(t,"iterate",Kt),Pe(e)?t:t.map(me))}function jn(e){return ve(e=z(e),"iterate",Kt),e}const gl={__proto__:null,[Symbol.iterator](){return ts(this,Symbol.iterator,me)},concat(...e){return _t(this).concat(...e.map(t=>K(t)?_t(t):t))},entries(){return ts(this,"entries",e=>(e[1]=me(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(me),arguments)},find(e,t){return We(this,"find",e,t,me,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,me,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return ns(this,"includes",e)},indexOf(...e){return ns(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return ns(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ht(this,"pop")},push(...e){return Ht(this,"push",e)},reduce(e,...t){return gr(this,"reduce",e,t)},reduceRight(e,...t){return gr(this,"reduceRight",e,t)},shift(){return Ht(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ht(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Ht(this,"unshift",e)},values(){return ts(this,"values",me)}};function ts(e,t,n){const s=jn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const ml=Array.prototype;function We(e,t,n,s,r,i){const o=jn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==ml[t]){const h=c.apply(e,i);return l?me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,me(h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function gr(e,t,n,s){const r=jn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,me(l),c,e)}),r[t](i,...s)}function ns(e,t,n){const s=z(e);ve(s,"iterate",Kt);const r=s[t](...n);return(r===-1||r===!1)&&Ys(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function Ht(e,t,n=[]){it(),Bs();const s=z(e)[t].apply(e,n);return ks(),ot(),s}const yl=Hs("__proto__,__v_isRef,__isVue"),Oi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(st));function vl(e){st(e)||(e=String(e));const t=z(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Mi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Pl:Ni:i?Li:Ii).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=gl[n]))return c;if(n==="hasOwnProperty")return vl}const l=Reflect.get(t,n,ae(t)?t:s);return(st(n)?Oi.has(n):yl(n))||(r||ve(t,"get",n),i)?l:ae(l)?o&&js(n)?l:l.value:ne(l)?r?Bn(l):Un(l):l}}class Pi extends Mi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=vt(i);if(!Pe(s)&&!vt(s)&&(i=z(i),s=z(s)),!K(t)&&ae(i)&&!ae(s))return c?!1:(i.value=s,!0)}const o=K(t)&&js(n)?Number(n)e,Vn=e=>Reflect.getPrototypeOf(e);function cn(e,t,n=!1,s=!1){e=e.__v_raw;const r=z(e),i=z(t);n||(tt(t,i)&&ve(r,"get",t),ve(r,"get",i));const{has:o}=Vn(r),l=s?Ks:n?Xs:me;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function an(e,t=!1){const n=this.__v_raw,s=z(n),r=z(e);return t||(tt(e,r)&&ve(s,"has",e),ve(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function fn(e,t=!1){return e=e.__v_raw,!t&&ve(z(e),"iterate",ht),Reflect.get(e,"size",e)}function mr(e,t=!1){!t&&!Pe(e)&&!vt(e)&&(e=z(e));const n=z(this);return Vn(n).has.call(n,e)||(n.add(e),Ge(n,"add",e,e)),this}function yr(e,t,n=!1){!n&&!Pe(t)&&!vt(t)&&(t=z(t));const s=z(this),{has:r,get:i}=Vn(s);let o=r.call(s,e);o||(e=z(e),o=r.call(s,e));const l=i.call(s,e);return s.set(e,t),o?tt(t,l)&&Ge(s,"set",e,t):Ge(s,"add",e,t),this}function vr(e){const t=z(this),{has:n,get:s}=Vn(t);let r=n.call(t,e);r||(e=z(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&Ge(t,"delete",e,void 0),i}function br(){const e=z(this),t=e.size!==0,n=e.clear();return t&&Ge(e,"clear",void 0,void 0),n}function un(e,t){return function(s,r){const i=this,o=i.__v_raw,l=z(o),c=t?Ks:e?Xs:me;return!e&&ve(l,"iterate",ht),o.forEach((f,a)=>s.call(r,c(f),c(a),i))}}function dn(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=At(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Ks:t?Xs:me;return!t&&ve(i,"iterate",c?Es:ht),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Xe(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function El(){const e={get(i){return cn(this,i)},get size(){return fn(this)},has:an,add:mr,set:yr,delete:vr,clear:br,forEach:un(!1,!1)},t={get(i){return cn(this,i,!1,!0)},get size(){return fn(this)},has:an,add(i){return mr.call(this,i,!0)},set(i,o){return yr.call(this,i,o,!0)},delete:vr,clear:br,forEach:un(!1,!0)},n={get(i){return cn(this,i,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:un(!0,!1)},s={get(i){return cn(this,i,!0,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:un(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=dn(i,!1,!1),n[i]=dn(i,!0,!1),t[i]=dn(i,!1,!0),s[i]=dn(i,!0,!0)}),[e,n,t,s]}const[xl,Tl,Cl,Al]=El();function qs(e,t){const n=t?e?Al:Cl:e?Tl:xl;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(J(n,r)&&r in s?n:s,r,i)}const Rl={get:qs(!1,!1)},Ol={get:qs(!1,!0)},Ml={get:qs(!0,!1)};const Ii=new WeakMap,Li=new WeakMap,Ni=new WeakMap,Pl=new WeakMap;function Il(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ll(e){return e.__v_skip||!Object.isExtensible(e)?0:Il(Zo(e))}function Un(e){return vt(e)?e:Gs(e,!1,_l,Rl,Ii)}function Nl(e){return Gs(e,!1,Sl,Ol,Li)}function Bn(e){return Gs(e,!0,wl,Ml,Ni)}function Gs(e,t,n,s,r){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Ll(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function pt(e){return vt(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Ys(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function En(e){return!J(e,"__v_skip")&&Object.isExtensible(e)&&gi(e,"__v_skip",!0),e}const me=e=>ne(e)?Un(e):e,Xs=e=>ne(e)?Bn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function oe(e){return Fi(e,!1)}function zs(e){return Fi(e,!0)}function Fi(e,t){return ae(e)?e:new Fl(e,t)}class Fl{constructor(t,n){this.dep=new Dn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||vt(t);t=s?t:z(t),tt(t,n)&&(this._rawValue=t,this._value=s?t:me(t),this.dep.trigger())}}function Hi(e){return ae(e)?e.value:e}const Hl={get:(e,t,n)=>t==="__v_raw"?e:Hi(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function $i(e){return pt(e)?e:new Proxy(e,Hl)}class $l{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Dn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function Dl(e){return new $l(e)}class jl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return pl(z(this._object),this._key)}}class Vl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Ul(e,t,n){return ae(e)?e:q(e)?new Vl(e):ne(e)&&arguments.length>1?Bl(e,t,n):oe(e)}function Bl(e,t,n){const s=e[t];return ae(s)?s:new jl(e,t,n)}class kl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Dn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Wt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&te!==this)return Ei(this),!0}get value(){const t=this.dep.track();return Ci(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Wl(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new kl(s,r,n)}const hn={},On=new WeakMap;let ut;function Kl(e,t=!1,n=ut){if(n){let s=On.get(n);s||On.set(n,s=[]),s.push(e)}}function ql(e,t,n=Z){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=m=>r?m:Pe(m)||r===!1||r===0?qe(m,1):qe(m);let a,h,g,v,_=!1,S=!1;if(ae(e)?(h=()=>e.value,_=Pe(e)):pt(e)?(h=()=>f(e),_=!0):K(e)?(S=!0,_=e.some(m=>pt(m)||Pe(m)),h=()=>e.map(m=>{if(ae(m))return m.value;if(pt(m))return f(m);if(q(m))return c?c(m,2):m()})):q(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){it();try{g()}finally{ot()}}const m=ut;ut=a;try{return c?c(e,3,[v]):e(v)}finally{ut=m}}:h=Ue,t&&r){const m=h,M=r===!0?1/0:r;h=()=>qe(m(),M)}const U=_i(),N=()=>{a.stop(),U&&Ds(U.effects,a)};if(i&&t){const m=t;t=(...M)=>{m(...M),N()}}let B=S?new Array(e.length).fill(hn):hn;const p=m=>{if(!(!(a.flags&1)||!a.dirty&&!m))if(t){const M=a.run();if(r||_||(S?M.some((F,$)=>tt(F,B[$])):tt(M,B))){g&&g();const F=ut;ut=a;try{const $=[M,B===hn?void 0:S&&B[0]===hn?[]:B,v];c?c(t,3,$):t(...$),B=M}finally{ut=F}}}else a.run()};return l&&l(p),a=new wi(h),a.scheduler=o?()=>o(p,!1):p,v=m=>Kl(m,!1,a),g=a.onStop=()=>{const m=On.get(a);if(m){if(c)c(m,4);else for(const M of m)M();On.delete(a)}},t?s?p(!0):B=a.run():o?o(p.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function qe(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ae(e))qe(e.value,t,n);else if(K(e))for(let s=0;s{qe(s,t,n)});else if(pi(e)){for(const s in e)qe(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&qe(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.10 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function en(e,t,n,s){try{return s?e(...s):e()}catch(r){tn(r,t,n)}}function Fe(e,t,n,s){if(q(e)){const r=en(e,t,n,s);return r&&di(r)&&r.catch(i=>{tn(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=we[s],i=Gt(r);i=Gt(n)?we.push(e):we.splice(Yl(t),0,e),e.flags|=1,ji()}}function ji(){!qt&&!xs&&(xs=!0,Js=Di.then(Vi))}function Xl(e){K(e)?Ot.push(...e):Qe&&e.id===-1?Qe.splice(St+1,0,e):e.flags&1||(Ot.push(e),e.flags|=1),ji()}function _r(e,t,n=qt?je+1:0){for(;nGt(n)-Gt(s));if(Ot.length=0,Qe){Qe.push(...t);return}for(Qe=t,St=0;Ste.id==null?e.flags&2?-1:1/0:e.id;function Vi(e){xs=!1,qt=!0;try{for(je=0;je{s._d&&Nr(-1);const i=Pn(t);let o;try{o=e(...r)}finally{Pn(i),s._d&&Nr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function If(e,t){if(de===null)return e;const n=Xn(de),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,jt=e=>e&&(e.disabled||e.disabled===""),Jl=e=>e&&(e.defer||e.defer===""),wr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Sr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ts=(e,t)=>{const n=e&&e.to;return re(n)?t?t(n):null:n},Ql={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:h,pbc:g,o:{insert:v,querySelector:_,createText:S,createComment:U}}=f,N=jt(t.props);let{shapeFlag:B,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=S(""),F=t.anchor=S("");v(M,n,s),v(F,n,s);const $=(R,b)=>{B&16&&(r&&r.isCE&&(r.ce._teleportTarget=R),a(p,R,b,r,i,o,l,c))},j=()=>{const R=t.target=Ts(t.props,_),b=Wi(R,t,S,v);R&&(o!=="svg"&&wr(R)?o="svg":o!=="mathml"&&Sr(R)&&(o="mathml"),N||($(R,b),xn(t)))};N&&($(n,F),xn(t)),Jl(t.props)?Ee(j,i):j()}else{t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,j=jt(e.props),R=j?n:F,b=j?M:$;if(o==="svg"||wr(F)?o="svg":(o==="mathml"||Sr(F))&&(o="mathml"),m?(g(e.dynamicChildren,m,R,r,i,o,l),sr(e,t,!0)):c||h(e,t,R,b,r,i,o,l,!1),N)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const L=t.target=Ts(t.props,_);L&&pn(t,L,null,f,0)}else j&&pn(t,F,$,f,1);xn(t)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:h,props:g}=e;if(h&&(r(f),r(a)),i&&r(c),o&16){const v=i||!jt(g);for(let _=0;_{e.isMounted=!0}),Ji(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Ki={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},qi=e=>{const t=e.subTree;return t.component?qi(t.component):t},tc={name:"BaseTransition",props:Ki,setup(e,{slots:t}){const n=Yn(),s=ec();return()=>{const r=t.default&&Xi(t.default(),!0);if(!r||!r.length)return;const i=Gi(r),o=z(e),{mode:l}=o;if(s.isLeaving)return ss(i);const c=Er(i);if(!c)return ss(i);let f=Cs(c,o,s,n,g=>f=g);c.type!==ye&&Yt(c,f);const a=n.subTree,h=a&&Er(a);if(h&&h.type!==ye&&!dt(c,h)&&qi(n).type!==ye){const g=Cs(h,o,s,n);if(Yt(h,g),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,g.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete g.afterLeave},ss(i);l==="in-out"&&c.type!==ye&&(g.delayLeave=(v,_,S)=>{const U=Yi(s,h);U[String(h.key)]=h,v[Ze]=()=>{_(),v[Ze]=void 0,delete f.delayedLeave},f.delayedLeave=S})}return i}}};function Gi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const nc=tc;function Yi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Cs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:g,onLeave:v,onAfterLeave:_,onLeaveCancelled:S,onBeforeAppear:U,onAppear:N,onAfterAppear:B,onAppearCancelled:p}=t,m=String(e.key),M=Yi(n,e),F=(R,b)=>{R&&Fe(R,s,9,b)},$=(R,b)=>{const L=b[1];F(R,b),K(R)?R.every(x=>x.length<=1)&&L():R.length<=1&&L()},j={mode:o,persisted:l,beforeEnter(R){let b=c;if(!n.isMounted)if(i)b=U||c;else return;R[Ze]&&R[Ze](!0);const L=M[m];L&&dt(e,L)&&L.el[Ze]&&L.el[Ze](),F(b,[R])},enter(R){let b=f,L=a,x=h;if(!n.isMounted)if(i)b=N||f,L=B||a,x=p||h;else return;let W=!1;const se=R[gn]=ce=>{W||(W=!0,ce?F(x,[R]):F(L,[R]),j.delayedLeave&&j.delayedLeave(),R[gn]=void 0)};b?$(b,[R,se]):se()},leave(R,b){const L=String(e.key);if(R[gn]&&R[gn](!0),n.isUnmounting)return b();F(g,[R]);let x=!1;const W=R[Ze]=se=>{x||(x=!0,b(),se?F(S,[R]):F(_,[R]),R[Ze]=void 0,M[L]===e&&delete M[L])};M[L]=e,v?$(v,[R,W]):W()},clone(R){const b=Cs(R,t,n,s,r);return r&&r(b),b}};return j}function ss(e){if(nn(e))return e=nt(e),e.children=null,e}function Er(e){if(!nn(e))return ki(e.type)&&e.children?Gi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Xi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iIn(_,t&&(K(t)?t[S]:t),n,s,r));return}if(gt(s)&&!r)return;const i=s.shapeFlag&4?Xn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===Z?l.refs={}:l.refs,h=l.setupState,g=z(h),v=h===Z?()=>!1:_=>J(g,_);if(f!=null&&f!==c&&(re(f)?(a[f]=null,v(f)&&(h[f]=null)):ae(f)&&(f.value=null)),q(c))en(c,l,12,[o,a]);else{const _=re(c),S=ae(c);if(_||S){const U=()=>{if(e.f){const N=_?v(c)?h[c]:a[c]:c.value;r?K(N)&&Ds(N,i):K(N)?N.includes(i)||N.push(i):_?(a[c]=[i],v(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,v(c)&&(h[c]=o)):S&&(c.value=o,e.k&&(a[e.k]=o))};o?(U.id=-1,Ee(U,n)):U()}}}let xr=!1;const wt=()=>{xr||(console.error("Hydration completed but contains mismatches."),xr=!0)},sc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",rc=e=>e.namespaceURI.includes("MathML"),mn=e=>{if(e.nodeType===1){if(sc(e))return"svg";if(rc(e))return"mathml"}},Tt=e=>e.nodeType===8;function ic(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),Mn(),m._vnode=p;return}h(m.firstChild,p,null,null,null),Mn(),m._vnode=p},h=(p,m,M,F,$,j=!1)=>{j=j||!!m.dynamicChildren;const R=Tt(p)&&p.data==="[",b=()=>S(p,m,M,F,$,R),{type:L,ref:x,shapeFlag:W,patchFlag:se}=m;let ce=p.nodeType;m.el=p,se===-2&&(j=!1,m.dynamicChildren=null);let V=null;switch(L){case mt:ce!==3?m.children===""?(c(m.el=r(""),o(p),p),V=p):V=b():(p.data!==m.children&&(wt(),p.data=m.children),V=i(p));break;case ye:B(p)?(V=i(p),N(m.el=p.content.firstChild,p,M)):ce!==8||R?V=b():V=i(p);break;case Ut:if(R&&(p=i(p),ce=p.nodeType),ce===1||ce===3){V=p;const Y=!m.children.length;for(let D=0;D{j=j||!!m.dynamicChildren;const{type:R,props:b,patchFlag:L,shapeFlag:x,dirs:W,transition:se}=m,ce=R==="input"||R==="option";if(ce||L!==-1){W&&Ve(m,null,M,"created");let V=!1;if(B(p)){V=go(F,se)&&M&&M.vnode.props&&M.vnode.props.appear;const D=p.content.firstChild;V&&se.beforeEnter(D),N(D,p,M),m.el=p=D}if(x&16&&!(b&&(b.innerHTML||b.textContent))){let D=v(p.firstChild,m,p,M,F,$,j);for(;D;){yn(p,1)||wt();const he=D;D=D.nextSibling,l(he)}}else if(x&8){let D=m.children;D[0]===` -`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(yn(p,0)||wt(),p.textContent=m.children)}if(b){if(ce||!j||L&48){const D=p.tagName.includes("-");for(const he in b)(ce&&(he.endsWith("value")||he==="indeterminate")||Zt(he)&&!Rt(he)||he[0]==="."||D)&&s(p,he,null,b[he],void 0,M)}else if(b.onClick)s(p,"onClick",null,b.onClick,void 0,M);else if(L&4&&pt(b.style))for(const D in b.style)b.style[D]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Oe(Y,M,m),W&&Ve(m,null,M,"beforeMount"),((Y=b&&b.onVnodeMounted)||W||V)&&_o(()=>{Y&&Oe(Y,M,m),V&&se.enter(p),W&&Ve(m,null,M,"mounted")},F)}return p.nextSibling},v=(p,m,M,F,$,j,R)=>{R=R||!!m.dynamicChildren;const b=m.children,L=b.length;for(let x=0;x{const{slotScopeIds:R}=m;R&&($=$?$.concat(R):R);const b=o(p),L=v(i(p),m,b,M,F,$,j);return L&&Tt(L)&&L.data==="]"?i(m.anchor=L):(wt(),c(m.anchor=f("]"),b,L),L)},S=(p,m,M,F,$,j)=>{if(yn(p.parentElement,1)||wt(),m.el=null,j){const L=U(p);for(;;){const x=i(p);if(x&&x!==L)l(x);else break}}const R=i(p),b=o(p);return l(p),n(null,m,b,R,M,F,mn(b),$),R},U=(p,m="[",M="]")=>{let F=0;for(;p;)if(p=i(p),p&&Tt(p)&&(p.data===m&&F++,p.data===M)){if(F===0)return i(p);F--}return p},N=(p,m,M)=>{const F=m.parentNode;F&&F.replaceChild(p,m);let $=M;for(;$;)$.vnode.el===m&&($.vnode.el=$.subTree.el=p),$=$.parent},B=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const Tr="data-allow-mismatch",oc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Tr);)e=e.parentElement;const n=e&&e.getAttribute(Tr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(oc[t])}}function lc(e,t){if(Tt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Tt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const gt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Nf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,h=0;const g=()=>(h++,f=null,v()),v=()=>{let _;return f||(_=f=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),c)return new Promise((U,N)=>{c(S,()=>U(g()),()=>N(S),h+1)});throw S}).then(S=>_!==f&&f?f:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),a=S,S)))};return Zs({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(_,S,U){const N=i?()=>{const B=i(U,p=>lc(_,p));B&&(S.bum||(S.bum=[])).push(B)}:U;a?N():v().then(()=>!S.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const _=ue;if(er(_),a)return()=>rs(a,_);const S=p=>{f=null,tn(p,_,13,!s)};if(l&&_.suspense||rn)return v().then(p=>()=>rs(p,_)).catch(p=>(S(p),()=>s?le(s,{error:p}):null));const U=oe(!1),N=oe(),B=oe(!!r);return r&&setTimeout(()=>{B.value=!1},r),o!=null&&setTimeout(()=>{if(!U.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);S(p),N.value=p}},o),v().then(()=>{U.value=!0,_.parent&&nn(_.parent.vnode)&&_.parent.update()}).catch(p=>{S(p),N.value=p}),()=>{if(U.value&&a)return rs(a,_);if(N.value&&s)return le(s,{error:N.value});if(n&&!B.value)return le(n)}}})}function rs(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=le(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const nn=e=>e.type.__isKeepAlive;function cc(e,t){zi(e,"a",t)}function ac(e,t){zi(e,"da",t)}function zi(e,t,n=ue){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Wn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)nn(r.parent.vnode)&&fc(s,t,n,r),r=r.parent}}function fc(e,t,n,s){const r=Wn(t,e,s,!0);Kn(()=>{Ds(s[t],r)},n)}function Wn(e,t,n=ue,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=sn(n),c=Fe(t,n,e,o);return l(),ot(),c});return s?r.unshift(i):r.push(i),i}}const Ye=e=>(t,n=ue)=>{(!rn||e==="sp")&&Wn(e,(...s)=>t(...s),n)},uc=Ye("bm"),Lt=Ye("m"),dc=Ye("bu"),hc=Ye("u"),Ji=Ye("bum"),Kn=Ye("um"),pc=Ye("sp"),gc=Ye("rtg"),mc=Ye("rtc");function yc(e,t=ue){Wn("ec",e,t)}const Qi="components";function Ff(e,t){return eo(Qi,e,!0,t)||e}const Zi=Symbol.for("v-ndc");function Hf(e){return re(e)?eo(Qi,e,!1)||e:e||Zi}function eo(e,t,n=!0,s=!1){const r=de||ue;if(r){const i=r.type;{const l=na(i,!1);if(l&&(l===t||l===Ie(t)||l===$n(Ie(t))))return i}const o=Cr(r[e]||i[e],t)||Cr(r.appContext[e],t);return!o&&s?i:o}}function Cr(e,t){return e&&(e[t]||e[Ie(t)]||e[$n(Ie(t))])}function $f(e,t,n,s){let r;const i=n,o=K(e);if(o||re(e)){const l=o&&pt(e);let c=!1;l&&(c=!Pe(e),e=jn(e)),r=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;czt(t)?!(t.type===ye||t.type===Se&&!to(t.children)):!0)?e:null}function jf(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:wn(s)]=e[s];return n}const As=e=>e?To(e)?Xn(e):As(e.parent):null,Vt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>As(e.parent),$root:e=>As(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>tr(e),$forceUpdate:e=>e.f||(e.f=()=>{Qs(e.update)}),$nextTick:e=>e.n||(e.n=kn.bind(e.proxy)),$watch:e=>jc.bind(e)}),is=(e,t)=>e!==Z&&!e.__isScriptSetup&&J(e,t),vc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(is(s,t))return o[t]=1,s[t];if(r!==Z&&J(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&J(f,t))return o[t]=3,i[t];if(n!==Z&&J(n,t))return o[t]=4,n[t];Rs&&(o[t]=0)}}const a=Vt[t];let h,g;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==Z&&J(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,J(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return is(r,t)?(r[t]=n,!0):s!==Z&&J(s,t)?(s[t]=n,!0):J(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==Z&&J(e,o)||is(t,o)||(l=i[0])&&J(l,o)||J(s,o)||J(Vt,o)||J(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:J(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Vf(){return bc().slots}function bc(){const e=Yn();return e.setupContext||(e.setupContext=Ao(e))}function Ar(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Rs=!0;function _c(e){const t=tr(e),n=e.proxy,s=e.ctx;Rs=!1,t.beforeCreate&&Rr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:g,beforeUpdate:v,updated:_,activated:S,deactivated:U,beforeDestroy:N,beforeUnmount:B,destroyed:p,unmounted:m,render:M,renderTracked:F,renderTriggered:$,errorCaptured:j,serverPrefetch:R,expose:b,inheritAttrs:L,components:x,directives:W,filters:se}=t;if(f&&wc(f,s,null),o)for(const Y in o){const D=o[Y];q(D)&&(s[Y]=D.bind(n))}if(r){const Y=r.call(n,n);ne(Y)&&(e.data=Un(Y))}if(Rs=!0,i)for(const Y in i){const D=i[Y],he=q(D)?D.bind(n,n):q(D.get)?D.get.bind(n,n):Ue,on=!q(D)&&q(D.set)?D.set.bind(n):Ue,lt=ie({get:he,set:on});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:$e=>lt.value=$e})}if(l)for(const Y in l)no(l[Y],s,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(D=>{Ac(D,Y[D])})}a&&Rr(a,e,"c");function V(Y,D){K(D)?D.forEach(he=>Y(he.bind(n))):D&&Y(D.bind(n))}if(V(uc,h),V(Lt,g),V(dc,v),V(hc,_),V(cc,S),V(ac,U),V(yc,j),V(mc,F),V(gc,$),V(Ji,B),V(Kn,m),V(pc,R),K(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(D=>{Object.defineProperty(Y,D,{get:()=>n[D],set:he=>n[D]=he})})}else e.exposed||(e.exposed={});M&&e.render===Ue&&(e.render=M),L!=null&&(e.inheritAttrs=L),x&&(e.components=x),W&&(e.directives=W),R&&er(e)}function wc(e,t,n=Ue){K(e)&&(e=Os(e));for(const s in e){const r=e[s];let i;ne(r)?"default"in r?i=Pt(r.from||s,r.default,!0):i=Pt(r.from||s):i=Pt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Rr(e,t,n){Fe(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function no(e,t,n,s){let r=s.includes(".")?yo(n,s):()=>n[s];if(re(e)){const i=t[e];q(i)&&Be(r,i)}else if(q(e))Be(r,e.bind(n));else if(ne(e))if(K(e))e.forEach(i=>no(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Be(r,i,e)}}function tr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Ln(c,f,o,!0)),Ln(c,t,o)),ne(t)&&i.set(t,c),c}function Ln(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Ln(e,i,n,!0),r&&r.forEach(o=>Ln(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Sc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Sc={data:Or,props:Mr,emits:Mr,methods:Dt,computed:Dt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Dt,directives:Dt,watch:xc,provide:Or,inject:Ec};function Or(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Ec(e,t){return Dt(Os(e),Os(t))}function Os(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(s&&s.proxy):t}}const ro={},io=()=>Object.create(ro),oo=e=>Object.getPrototypeOf(e)===ro;function Rc(e,t,n,s=!1){const r={},i=io();e.propsDefaults=Object.create(null),lo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Nl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Oc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,v]=co(h,t,!0);fe(o,g),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&s.set(e,Ct),Ct;if(K(i))for(let a=0;ae[0]==="_"||e==="$stable",nr=e=>K(e)?e.map(Me):[Me(e)],Pc=(e,t,n)=>{if(t._n)return t;const s=zl((...r)=>nr(t(...r)),n);return s._c=!1,s},fo=(e,t,n)=>{const s=e._ctx;for(const r in e){if(ao(r))continue;const i=e[r];if(q(i))t[r]=Pc(r,i,s);else if(i!=null){const o=nr(i);t[r]=()=>o}}},uo=(e,t)=>{const n=nr(t);e.slots.default=()=>n},ho=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Ic=(e,t,n)=>{const s=e.slots=io();if(e.vnode.shapeFlag&32){const r=t._;r?(ho(s,t,n),n&&gi(s,"_",r,!0)):fo(t,s)}else t&&uo(e,t)},Lc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Z;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:ho(r,t,n):(i=!t.$stable,fo(t,r)),o=t}else t&&(uo(e,t),o={default:1});if(i)for(const l in r)!ao(l)&&o[l]==null&&delete r[l]},Ee=_o;function Nc(e){return po(e)}function Fc(e){return po(e,ic)}function po(e,t){const n=mi();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:g,setScopeId:v=Ue,insertStaticContent:_}=e,S=(u,d,y,T=null,w=null,E=null,P=void 0,O=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!dt(u,d)&&(T=ln(u),$e(u,w,E,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:C,ref:k,shapeFlag:I}=d;switch(C){case mt:U(u,d,y,T);break;case ye:N(u,d,y,T);break;case Ut:u==null&&B(d,y,T,P);break;case Se:x(u,d,y,T,w,E,P,O,A);break;default:I&1?M(u,d,y,T,w,E,P,O,A):I&6?W(u,d,y,T,w,E,P,O,A):(I&64||I&128)&&C.process(u,d,y,T,w,E,P,O,A,bt)}k!=null&&w&&In(k,u&&u.ref,E,d||u,!d)},U=(u,d,y,T)=>{if(u==null)s(d.el=l(d.children),y,T);else{const w=d.el=u.el;d.children!==u.children&&f(w,d.children)}},N=(u,d,y,T)=>{u==null?s(d.el=c(d.children||""),y,T):d.el=u.el},B=(u,d,y,T)=>{[u.el,u.anchor]=_(u.children,d,y,T,u.el,u.anchor)},p=({el:u,anchor:d},y,T)=>{let w;for(;u&&u!==d;)w=g(u),s(u,y,T),u=w;s(d,y,T)},m=({el:u,anchor:d})=>{let y;for(;u&&u!==d;)y=g(u),r(u),u=y;r(d)},M=(u,d,y,T,w,E,P,O,A)=>{d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),u==null?F(d,y,T,w,E,P,O,A):R(u,d,w,E,P,O,A)},F=(u,d,y,T,w,E,P,O)=>{let A,C;const{props:k,shapeFlag:I,transition:H,dirs:G}=u;if(A=u.el=o(u.type,E,k&&k.is,k),I&8?a(A,u.children):I&16&&j(u.children,A,null,T,w,os(u,E),P,O),G&&Ve(u,null,T,"created"),$(A,u,u.scopeId,P,T),k){for(const ee in k)ee!=="value"&&!Rt(ee)&&i(A,ee,null,k[ee],E,T);"value"in k&&i(A,"value",null,k.value,E),(C=k.onVnodeBeforeMount)&&Oe(C,T,u)}G&&Ve(u,null,T,"beforeMount");const X=go(w,H);X&&H.beforeEnter(A),s(A,d,y),((C=k&&k.onVnodeMounted)||X||G)&&Ee(()=>{C&&Oe(C,T,u),X&&H.enter(A),G&&Ve(u,null,T,"mounted")},w)},$=(u,d,y,T,w)=>{if(y&&v(u,y),T)for(let E=0;E{for(let C=A;C{const O=d.el=u.el;let{patchFlag:A,dynamicChildren:C,dirs:k}=d;A|=u.patchFlag&16;const I=u.props||Z,H=d.props||Z;let G;if(y&&ct(y,!1),(G=H.onVnodeBeforeUpdate)&&Oe(G,y,d,u),k&&Ve(d,u,y,"beforeUpdate"),y&&ct(y,!0),(I.innerHTML&&H.innerHTML==null||I.textContent&&H.textContent==null)&&a(O,""),C?b(u.dynamicChildren,C,O,y,T,os(d,w),E):P||D(u,d,O,null,y,T,os(d,w),E,!1),A>0){if(A&16)L(O,I,H,y,w);else if(A&2&&I.class!==H.class&&i(O,"class",null,H.class,w),A&4&&i(O,"style",I.style,H.style,w),A&8){const X=d.dynamicProps;for(let ee=0;ee{G&&Oe(G,y,d,u),k&&Ve(d,u,y,"updated")},T)},b=(u,d,y,T,w,E,P)=>{for(let O=0;O{if(d!==y){if(d!==Z)for(const E in d)!Rt(E)&&!(E in y)&&i(u,E,d[E],null,w,T);for(const E in y){if(Rt(E))continue;const P=y[E],O=d[E];P!==O&&E!=="value"&&i(u,E,O,P,w,T)}"value"in y&&i(u,"value",d.value,y.value,w)}},x=(u,d,y,T,w,E,P,O,A)=>{const C=d.el=u?u.el:l(""),k=d.anchor=u?u.anchor:l("");let{patchFlag:I,dynamicChildren:H,slotScopeIds:G}=d;G&&(O=O?O.concat(G):G),u==null?(s(C,y,T),s(k,y,T),j(d.children||[],y,k,w,E,P,O,A)):I>0&&I&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,y,w,E,P,O),(d.key!=null||w&&d===w.subTree)&&sr(u,d,!0)):D(u,d,y,k,w,E,P,O,A)},W=(u,d,y,T,w,E,P,O,A)=>{d.slotScopeIds=O,u==null?d.shapeFlag&512?w.ctx.activate(d,y,T,P,A):se(d,y,T,w,E,P,A):ce(u,d,A)},se=(u,d,y,T,w,E,P)=>{const O=u.component=Qc(u,T,w);if(nn(u)&&(O.ctx.renderer=bt),Zc(O,!1,P),O.asyncDep){if(w&&w.registerDep(O,V,P),!u.el){const A=O.subTree=le(ye);N(null,A,d,y)}}else V(O,u,d,y,w,E,P)},ce=(u,d,y)=>{const T=d.component=u.component;if(Wc(u,d,y))if(T.asyncDep&&!T.asyncResolved){Y(T,d,y);return}else T.next=d,T.update();else d.el=u.el,T.vnode=d},V=(u,d,y,T,w,E,P)=>{const O=()=>{if(u.isMounted){let{next:I,bu:H,u:G,parent:X,vnode:ee}=u;{const Te=mo(u);if(Te){I&&(I.el=ee.el,Y(u,I,P)),Te.asyncDep.then(()=>{u.isUnmounted||O()});return}}let Q=I,xe;ct(u,!1),I?(I.el=ee.el,Y(u,I,P)):I=ee,H&&Sn(H),(xe=I.props&&I.props.onVnodeBeforeUpdate)&&Oe(xe,X,I,ee),ct(u,!0);const pe=ls(u),Le=u.subTree;u.subTree=pe,S(Le,pe,h(Le.el),ln(Le),u,w,E),I.el=pe.el,Q===null&&Kc(u,pe.el),G&&Ee(G,w),(xe=I.props&&I.props.onVnodeUpdated)&&Ee(()=>Oe(xe,X,I,ee),w)}else{let I;const{el:H,props:G}=d,{bm:X,m:ee,parent:Q,root:xe,type:pe}=u,Le=gt(d);if(ct(u,!1),X&&Sn(X),!Le&&(I=G&&G.onVnodeBeforeMount)&&Oe(I,Q,d),ct(u,!0),H&&Qn){const Te=()=>{u.subTree=ls(u),Qn(H,u.subTree,u,w,null)};Le&&pe.__asyncHydrate?pe.__asyncHydrate(H,u,Te):Te()}else{xe.ce&&xe.ce._injectChildStyle(pe);const Te=u.subTree=ls(u);S(null,Te,y,T,u,w,E),d.el=Te.el}if(ee&&Ee(ee,w),!Le&&(I=G&&G.onVnodeMounted)){const Te=d;Ee(()=>Oe(I,Q,Te),w)}(d.shapeFlag&256||Q&>(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&Ee(u.a,w),u.isMounted=!0,d=y=T=null}};u.scope.on();const A=u.effect=new wi(O);u.scope.off();const C=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Qs(k),ct(u,!0),C()},Y=(u,d,y)=>{d.component=u;const T=u.vnode.props;u.vnode=d,u.next=null,Oc(u,d.props,T,y),Lc(u,d.children,y),it(),_r(u),ot()},D=(u,d,y,T,w,E,P,O,A=!1)=>{const C=u&&u.children,k=u?u.shapeFlag:0,I=d.children,{patchFlag:H,shapeFlag:G}=d;if(H>0){if(H&128){on(C,I,y,T,w,E,P,O,A);return}else if(H&256){he(C,I,y,T,w,E,P,O,A);return}}G&8?(k&16&&Nt(C,w,E),I!==C&&a(y,I)):k&16?G&16?on(C,I,y,T,w,E,P,O,A):Nt(C,w,E,!0):(k&8&&a(y,""),G&16&&j(I,y,T,w,E,P,O,A))},he=(u,d,y,T,w,E,P,O,A)=>{u=u||Ct,d=d||Ct;const C=u.length,k=d.length,I=Math.min(C,k);let H;for(H=0;Hk?Nt(u,w,E,!0,!1,I):j(d,y,T,w,E,P,O,A,I)},on=(u,d,y,T,w,E,P,O,A)=>{let C=0;const k=d.length;let I=u.length-1,H=k-1;for(;C<=I&&C<=H;){const G=u[C],X=d[C]=A?et(d[C]):Me(d[C]);if(dt(G,X))S(G,X,y,null,w,E,P,O,A);else break;C++}for(;C<=I&&C<=H;){const G=u[I],X=d[H]=A?et(d[H]):Me(d[H]);if(dt(G,X))S(G,X,y,null,w,E,P,O,A);else break;I--,H--}if(C>I){if(C<=H){const G=H+1,X=GH)for(;C<=I;)$e(u[C],w,E,!0),C++;else{const G=C,X=C,ee=new Map;for(C=X;C<=H;C++){const Ce=d[C]=A?et(d[C]):Me(d[C]);Ce.key!=null&&ee.set(Ce.key,C)}let Q,xe=0;const pe=H-X+1;let Le=!1,Te=0;const Ft=new Array(pe);for(C=0;C=pe){$e(Ce,w,E,!0);continue}let De;if(Ce.key!=null)De=ee.get(Ce.key);else for(Q=X;Q<=H;Q++)if(Ft[Q-X]===0&&dt(Ce,d[Q])){De=Q;break}De===void 0?$e(Ce,w,E,!0):(Ft[De-X]=C+1,De>=Te?Te=De:Le=!0,S(Ce,d[De],y,null,w,E,P,O,A),xe++)}const ur=Le?Hc(Ft):Ct;for(Q=ur.length-1,C=pe-1;C>=0;C--){const Ce=X+C,De=d[Ce],dr=Ce+1{const{el:E,type:P,transition:O,children:A,shapeFlag:C}=u;if(C&6){lt(u.component.subTree,d,y,T);return}if(C&128){u.suspense.move(d,y,T);return}if(C&64){P.move(u,d,y,bt);return}if(P===Se){s(E,d,y);for(let I=0;IO.enter(E),w);else{const{leave:I,delayLeave:H,afterLeave:G}=O,X=()=>s(E,d,y),ee=()=>{I(E,()=>{X(),G&&G()})};H?H(E,X,ee):ee()}else s(E,d,y)},$e=(u,d,y,T=!1,w=!1)=>{const{type:E,props:P,ref:O,children:A,dynamicChildren:C,shapeFlag:k,patchFlag:I,dirs:H,cacheIndex:G}=u;if(I===-2&&(w=!1),O!=null&&In(O,null,y,u,!0),G!=null&&(d.renderCache[G]=void 0),k&256){d.ctx.deactivate(u);return}const X=k&1&&H,ee=!gt(u);let Q;if(ee&&(Q=P&&P.onVnodeBeforeUnmount)&&Oe(Q,d,u),k&6)zo(u.component,y,T);else{if(k&128){u.suspense.unmount(y,T);return}X&&Ve(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,y,bt,T):C&&!C.hasOnce&&(E!==Se||I>0&&I&64)?Nt(C,d,y,!1,!0):(E===Se&&I&384||!w&&k&16)&&Nt(A,d,y),T&&ar(u)}(ee&&(Q=P&&P.onVnodeUnmounted)||X)&&Ee(()=>{Q&&Oe(Q,d,u),X&&Ve(u,null,d,"unmounted")},y)},ar=u=>{const{type:d,el:y,anchor:T,transition:w}=u;if(d===Se){Xo(y,T);return}if(d===Ut){m(u);return}const E=()=>{r(y),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:P,delayLeave:O}=w,A=()=>P(y,E);O?O(u.el,E,A):A()}else E()},Xo=(u,d)=>{let y;for(;u!==d;)y=g(u),r(u),u=y;r(d)},zo=(u,d,y)=>{const{bum:T,scope:w,job:E,subTree:P,um:O,m:A,a:C}=u;Ir(A),Ir(C),T&&Sn(T),w.stop(),E&&(E.flags|=8,$e(P,u,d,y)),O&&Ee(O,d),Ee(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Nt=(u,d,y,T=!1,w=!1,E=0)=>{for(let P=E;P{if(u.shapeFlag&6)return ln(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=g(u.anchor||u.el),y=d&&d[Bi];return y?g(y):d};let zn=!1;const fr=(u,d,y)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):S(d._vnode||null,u,d,null,null,null,y),d._vnode=u,zn||(zn=!0,_r(),Mn(),zn=!1)},bt={p:S,um:$e,m:lt,r:ar,mt:se,mc:j,pc:D,pbc:b,n:ln,o:e};let Jn,Qn;return t&&([Jn,Qn]=t(bt)),{render:fr,hydrate:Jn,createApp:Cc(fr,Jn)}}function os({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function go(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function sr(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function mo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:mo(t)}function Ir(e){if(e)for(let t=0;tPt($c);function rr(e,t){return qn(e,null,t)}function Uf(e,t){return qn(e,null,{flush:"post"})}function Be(e,t,n){return qn(e,t,n)}function qn(e,t,n=Z){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n);let c;if(rn)if(i==="sync"){const g=Dc();c=g.__watcherHandles||(g.__watcherHandles=[])}else if(!t||s)l.once=!0;else{const g=()=>{};return g.stop=Ue,g.resume=Ue,g.pause=Ue,g}const f=ue;l.call=(g,v,_)=>Fe(g,f,v,_);let a=!1;i==="post"?l.scheduler=g=>{Ee(g,f&&f.suspense)}:i!=="sync"&&(a=!0,l.scheduler=(g,v)=>{v?g():Qs(g)}),l.augmentJob=g=>{t&&(g.flags|=4),a&&(g.flags|=2,f&&(g.id=f.uid,g.i=f))};const h=ql(e,t,l);return c&&c.push(h),h}function jc(e,t,n){const s=this.proxy,r=re(e)?e.includes(".")?yo(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=sn(this),l=qn(r,i.bind(s),n);return o(),l}function yo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function Uc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Z;let r=n;const i=t.startsWith("update:"),o=i&&Vc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>re(a)?a.trim():a)),o.number&&(r=n.map(ws)));let l,c=s[l=wn(t)]||s[l=wn(Ie(t))];!c&&i&&(c=s[l=wn(rt(t))]),c&&Fe(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Fe(f,e,6,r)}}function vo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=vo(f,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),ne(e)&&s.set(e,o),o)}function Gn(e,t){return!e||!Zt(t)?!1:(t=t.slice(2).replace(/Once$/,""),J(e,t[0].toLowerCase()+t.slice(1))||J(e,rt(t))||J(e,t))}function ls(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:g,setupState:v,ctx:_,inheritAttrs:S}=e,U=Pn(e);let N,B;try{if(n.shapeFlag&4){const m=r||s,M=m;N=Me(f.call(M,m,a,h,v,g,_)),B=l}else{const m=t;N=Me(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),B=t.props?l:Bc(l)}}catch(m){Bt.length=0,tn(m,e,1),N=le(ye)}let p=N;if(B&&S!==!1){const m=Object.keys(B),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some($s)&&(B=kc(B,i)),p=nt(p,B,!1,!0))}return n.dirs&&(p=nt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),N=p,Pn(U),N}const Bc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Zt(n))&&((t||(t={}))[n]=e[n]);return t},kc=(e,t)=>{const n={};for(const s in e)(!$s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Wc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Lr(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function _o(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Xl(e)}const Se=Symbol.for("v-fgt"),mt=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Ut=Symbol.for("v-stc"),Bt=[];let Ae=null;function Ps(e=!1){Bt.push(Ae=e?null:[])}function qc(){Bt.pop(),Ae=Bt[Bt.length-1]||null}let Xt=1;function Nr(e){Xt+=e,e<0&&Ae&&(Ae.hasOnce=!0)}function wo(e){return e.dynamicChildren=Xt>0?Ae||Ct:null,qc(),Xt>0&&Ae&&Ae.push(e),e}function Bf(e,t,n,s,r,i){return wo(Eo(e,t,n,s,r,i,!0))}function Is(e,t,n,s,r){return wo(le(e,t,n,s,r,!0))}function zt(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const So=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||ae(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function Eo(e,t=null,n=null,s=0,r=null,i=e===Se?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&So(t),ref:t&&Tn(t),scopeId:Ui,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(ir(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=re(n)?8:16),Xt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=Gc;function Gc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Zi)&&(e=ye),zt(e)){const l=nt(e,t,!0);return n&&ir(l,n),Xt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(sa(e)&&(e=e.__vccOpts),t){t=Yc(t);let{class:l,style:c}=t;l&&!re(l)&&(t.class=Us(l)),ne(c)&&(Ys(c)&&!K(c)&&(c=fe({},c)),t.style=Vs(c))}const o=re(e)?1:bo(e)?128:ki(e)?64:ne(e)?4:q(e)?2:0;return Eo(e,t,n,s,r,o,i,!0)}function Yc(e){return e?Ys(e)||oo(e)?fe({},e):e:null}function nt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Xc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&So(f),ref:t&&t.ref?n&&i?K(i)?i.concat(Tn(t)):[i,Tn(t)]:Tn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nt(e.ssContent),ssFallback:e.ssFallback&&nt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Yt(a,c.clone(a)),a}function xo(e=" ",t=0){return le(mt,null,e,t)}function kf(e,t){const n=le(Ut,null,e);return n.staticCount=t,n}function Wf(e="",t=!1){return t?(Ps(),Is(ye,null,e)):le(ye,null,e)}function Me(e){return e==null||typeof e=="boolean"?le(ye):K(e)?le(Se,null,e.slice()):zt(e)?et(e):le(mt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nt(e)}function ir(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),ir(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!oo(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[xo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Xc(...e){const t={};for(let n=0;nue||de;let Nn,Ls;{const e=mi(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Nn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Ls=t("__VUE_SSR_SETTERS__",n=>rn=n)}const sn=e=>{const t=ue;return Nn(e),e.scope.on(),()=>{e.scope.off(),Nn(t)}},Fr=()=>{ue&&ue.scope.off(),Nn(null)};function To(e){return e.vnode.shapeFlag&4}let rn=!1;function Zc(e,t=!1,n=!1){t&&Ls(t);const{props:s,children:r}=e.vnode,i=To(e);Rc(e,s,i,t),Ic(e,r,n);const o=i?ea(e,t):void 0;return t&&Ls(!1),o}function ea(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,vc);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Ao(e):null,i=sn(e);it();const o=en(s,e,0,[e.props,r]);if(ot(),i(),di(o)){if(gt(e)||er(e),o.then(Fr,Fr),t)return o.then(l=>{Hr(e,l,t)}).catch(l=>{tn(l,e,0)});e.asyncDep=o}else Hr(e,o,t)}else Co(e,t)}function Hr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=$i(t)),Co(e,n)}let $r;function Co(e,t,n){const s=e.type;if(!e.render){if(!t&&$r&&!s.render){const r=s.template||tr(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=fe(fe({isCustomElement:i,delimiters:l},o),c);s.render=$r(r,f)}}e.render=s.render||Ue}{const r=sn(e);it();try{_c(e)}finally{ot(),r()}}}const ta={get(e,t){return ve(e,"get",""),e[t]}};function Ao(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ta),slots:e.slots,emit:e.emit,expose:t}}function Xn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy($i(En(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Vt)return Vt[n](e)},has(t,n){return n in t||n in Vt}})):e.proxy}function na(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function sa(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Wl(e,t,rn);function Ns(e,t,n){const s=arguments.length;return s===2?ne(t)&&!K(t)?zt(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&zt(n)&&(n=[n]),le(e,t,n))}const ra="3.5.10";/** -* @vue/runtime-dom v3.5.10 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Fs;const Dr=typeof window<"u"&&window.trustedTypes;if(Dr)try{Fs=Dr.createPolicy("vue",{createHTML:e=>e})}catch{}const Ro=Fs?e=>Fs.createHTML(e):e=>e,ia="http://www.w3.org/2000/svg",oa="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,jr=Ke&&Ke.createElement("template"),la={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ke.createElementNS(ia,e):t==="mathml"?Ke.createElementNS(oa,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{jr.innerHTML=Ro(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=jr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ze="transition",$t="animation",Jt=Symbol("_vtc"),Oo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ca=fe({},Ki,Oo),aa=e=>(e.displayName="Transition",e.props=ca,e),Kf=aa((e,{slots:t})=>Ns(nc,fa(e),t)),at=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Vr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function fa(e){const t={};for(const x in e)x in Oo||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,_=ua(r),S=_&&_[0],U=_&&_[1],{onBeforeEnter:N,onEnter:B,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:F=N,onAppear:$=B,onAppearCancelled:j=p}=t,R=(x,W,se)=>{ft(x,W?a:l),ft(x,W?f:o),se&&se()},b=(x,W)=>{x._isLeaving=!1,ft(x,h),ft(x,v),ft(x,g),W&&W()},L=x=>(W,se)=>{const ce=x?$:B,V=()=>R(W,x,se);at(ce,[W,V]),Ur(()=>{ft(W,x?c:i),Je(W,x?a:l),Vr(ce)||Br(W,s,S,V)})};return fe(t,{onBeforeEnter(x){at(N,[x]),Je(x,i),Je(x,o)},onBeforeAppear(x){at(F,[x]),Je(x,c),Je(x,f)},onEnter:L(!1),onAppear:L(!0),onLeave(x,W){x._isLeaving=!0;const se=()=>b(x,W);Je(x,h),Je(x,g),pa(),Ur(()=>{x._isLeaving&&(ft(x,h),Je(x,v),Vr(m)||Br(x,s,U,se))}),at(m,[x,se])},onEnterCancelled(x){R(x,!1),at(p,[x])},onAppearCancelled(x){R(x,!0),at(j,[x])},onLeaveCancelled(x){b(x),at(M,[x])}})}function ua(e){if(e==null)return null;if(ne(e))return[cs(e.enter),cs(e.leave)];{const t=cs(e);return[t,t]}}function cs(e){return nl(e)}function Je(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Jt]||(e[Jt]=new Set)).add(t)}function ft(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Jt];n&&(n.delete(t),n.size||(e[Jt]=void 0))}function Ur(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let da=0;function Br(e,t,n,s){const r=e._endId=++da,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=ha(e,t);if(!o)return s();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,g),i()},g=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[_]||"").split(", "),r=s(`${ze}Delay`),i=s(`${ze}Duration`),o=kr(r,i),l=s(`${$t}Delay`),c=s(`${$t}Duration`),f=kr(l,c);let a=null,h=0,g=0;t===ze?o>0&&(a=ze,h=o,g=i.length):t===$t?f>0&&(a=$t,h=f,g=c.length):(h=Math.max(o,f),a=h>0?o>f?ze:$t:null,g=a?a===ze?i.length:c.length:0);const v=a===ze&&/\b(transform|all)(,|$)/.test(s(`${ze}Property`).toString());return{type:a,timeout:h,propCount:g,hasTransform:v}}function kr(e,t){for(;e.lengthWr(n)+Wr(e[s])))}function Wr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function pa(){return document.body.offsetHeight}function ga(e,t,n){const s=e[Jt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Kr=Symbol("_vod"),ma=Symbol("_vsh"),ya=Symbol(""),va=/(^|;)\s*display\s*:/;function ba(e,t,n){const s=e.style,r=re(n);let i=!1;if(n&&!r){if(t)if(re(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Cn(s,l,"")}else for(const o in t)n[o]==null&&Cn(s,o,"");for(const o in n)o==="display"&&(i=!0),Cn(s,o,n[o])}else if(r){if(t!==n){const o=s[ya];o&&(n+=";"+o),s.cssText=n,i=va.test(n)}}else t&&e.removeAttribute("style");Kr in e&&(e[Kr]=i?s.display:"",e[ma]&&(s.display="none"))}const qr=/\s*!important$/;function Cn(e,t,n){if(K(n))n.forEach(s=>Cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=_a(e,t);qr.test(n)?e.setProperty(rt(s),n.replace(qr,""),"important"):e[s]=n}}const Gr=["Webkit","Moz","ms"],as={};function _a(e,t){const n=as[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return as[t]=s;s=$n(s);for(let r=0;rfs||(xa.then(()=>fs=0),fs=Date.now());function Ca(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Fe(Aa(s,n.value),t,5,[s])};return n.value=e,n.attached=Ta(),n}function Aa(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Zr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ra=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?ga(e,s,o):t==="style"?ba(e,n,s):Zt(t)?$s(t)||Sa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Oa(e,t,s,o))?(zr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Xr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!re(s))?zr(e,Ie(t),s):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Xr(e,t,s,o))};function Oa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Zr(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Zr(t)&&re(n)?!1:t in e}const ei=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Sn(t,n):t};function Ma(e){e.target.composing=!0}function ti(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const us=Symbol("_assign"),qf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[us]=ei(r);const i=s||r.props&&r.props.type==="number";Et(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=ws(l)),e[us](l)}),n&&Et(e,"change",()=>{e.value=e.value.trim()}),t||(Et(e,"compositionstart",Ma),Et(e,"compositionend",ti),Et(e,"change",ti))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[us]=ei(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?ws(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Pa=["ctrl","shift","alt","meta"],Ia={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Pa.some(n=>e[`${n}Key`]&&!t.includes(n))},Gf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=rt(r.key);if(t.some(o=>o===i||La[o]===i))return e(r)})},Mo=fe({patchProp:Ra},la);let kt,ni=!1;function Na(){return kt||(kt=Nc(Mo))}function Fa(){return kt=ni?kt:Fc(Mo),ni=!0,kt}const Xf=(...e)=>{const t=Na().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Io(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Po(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},zf=(...e)=>{const t=Fa().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Io(s);if(r)return n(r,!0,Po(r))},t};function Po(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Io(e){return re(e)?document.querySelector(e):e}const Jf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ha=window.__VP_SITE_DATA__;function or(e){return _i()?(ul(e),!0):!1}function ke(e){return typeof e=="function"?e():Hi(e)}const Lo=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Qf=e=>e!=null,$a=Object.prototype.toString,Da=e=>$a.call(e)==="[object Object]",Qt=()=>{},si=ja();function ja(){var e,t;return Lo&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Va(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const No=e=>e();function Ua(e,t={}){let n,s,r=Qt;const i=l=>{clearTimeout(l),r(),r=Qt};return l=>{const c=ke(e),f=ke(t.maxWait);return n&&i(n),c<=0||f!==void 0&&f<=0?(s&&(i(s),s=null),Promise.resolve(l())):new Promise((a,h)=>{r=t.rejectOnCancel?h:a,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,a(l())},f)),n=setTimeout(()=>{s&&i(s),s=null,a(l())},c)})}}function Ba(e=No){const t=oe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:Bn(t),pause:n,resume:s,eventFilter:r}}function ka(e){return Yn()}function Fo(...e){if(e.length!==1)return Ul(...e);const t=e[0];return typeof t=="function"?Bn(Dl(()=>({get:t,set:Qt}))):oe(t)}function Ho(e,t,n={}){const{eventFilter:s=No,...r}=n;return Be(e,Va(s,t),r)}function Wa(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Ba(s);return{stop:Ho(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function lr(e,t=!0,n){ka()?Lt(e,n):t?e():kn(e)}function Zf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Ho(e,t,{...i,eventFilter:Ua(s,{maxWait:r})})}function eu(e,t,n){let s;ae(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=Qt}=s,c=oe(!r),f=o?zs(t):oe(t);let a=0;return rr(async h=>{if(!c.value)return;a++;const g=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(S=>{h(()=>{i&&(i.value=!1),v||S()})});g===a&&(f.value=_)}catch(_){l(_)}finally{i&&g===a&&(i.value=!1),v=!0}}),r?ie(()=>(c.value=!0,f.value)):f}const He=Lo?window:void 0;function $o(e){var t;const n=ke(e);return(t=n==null?void 0:n.$el)!=null?t:n}function It(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=He):[t,n,s,r]=e,!t)return Qt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(a=>a()),i.length=0},l=(a,h,g,v)=>(a.addEventListener(h,g,v),()=>a.removeEventListener(h,g,v)),c=Be(()=>[$o(t),ke(r)],([a,h])=>{if(o(),!a)return;const g=Da(h)?{...h}:h;i.push(...n.flatMap(v=>s.map(_=>l(a,v,_,g))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return or(f),f}function Ka(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function tu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Ka(t);return It(r,i,a=>{a.repeat&&ke(l)||c(a)&&n(a)},o)}function qa(){const e=oe(!1),t=Yn();return t&&Lt(()=>{e.value=!0},t),e}function Ga(e){const t=qa();return ie(()=>(t.value,!!e()))}function Do(e,t={}){const{window:n=He}=t,s=Ga(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=oe(!1),o=f=>{i.value=f.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=rr(()=>{s.value&&(l(),r=n.matchMedia(ke(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return or(()=>{c(),l(),r=void 0}),i}const vn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bn="__vueuse_ssr_handlers__",Ya=Xa();function Xa(){return bn in vn||(vn[bn]=vn[bn]||{}),vn[bn]}function jo(e,t){return Ya[e]||t}function Vo(e){return Do("(prefers-color-scheme: dark)",e)}function za(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Ja={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},ri="vueuse-storage";function cr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=He,eventFilter:g,onError:v=b=>{console.error(b)},initOnMounted:_}=s,S=(a?zs:oe)(typeof t=="function"?t():t);if(!n)try{n=jo("getDefaultStorage",()=>{var b;return(b=He)==null?void 0:b.localStorage})()}catch(b){v(b)}if(!n)return S;const U=ke(t),N=za(U),B=(r=s.serializer)!=null?r:Ja[N],{pause:p,resume:m}=Wa(S,()=>F(S.value),{flush:i,deep:o,eventFilter:g});h&&l&&lr(()=>{n instanceof Storage?It(h,"storage",j):It(h,ri,R),_&&j()}),_||j();function M(b,L){if(h){const x={key:e,oldValue:b,newValue:L,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(ri,{detail:x}))}}function F(b){try{const L=n.getItem(e);if(b==null)M(L,null),n.removeItem(e);else{const x=B.write(b);L!==x&&(n.setItem(e,x),M(L,x))}}catch(L){v(L)}}function $(b){const L=b?b.newValue:n.getItem(e);if(L==null)return c&&U!=null&&n.setItem(e,B.write(U)),U;if(!b&&f){const x=B.read(L);return typeof f=="function"?f(x,U):N==="object"&&!Array.isArray(x)?{...U,...x}:x}else return typeof L!="string"?L:B.read(L)}function j(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){S.value=U;return}if(!(b&&b.key!==e)){p();try{(b==null?void 0:b.newValue)!==B.write(S.value)&&(S.value=$(b))}catch(L){v(L)}finally{b?kn(m):m()}}}}function R(b){j(b.detail)}return S}const Qa="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Za(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},g=Vo({window:r}),v=ie(()=>g.value?"dark":"light"),_=c||(o==null?Fo(s):cr(o,s,i,{window:r,listenToStorageChanges:l})),S=ie(()=>_.value==="auto"?v.value:_.value),U=jo("updateHTMLAttrs",(m,M,F)=>{const $=typeof m=="string"?r==null?void 0:r.document.querySelector(m):$o(m);if(!$)return;const j=new Set,R=new Set;let b=null;if(M==="class"){const x=F.split(/\s/g);Object.values(h).flatMap(W=>(W||"").split(/\s/g)).filter(Boolean).forEach(W=>{x.includes(W)?j.add(W):R.add(W)})}else b={key:M,value:F};if(j.size===0&&R.size===0&&b===null)return;let L;a&&(L=r.document.createElement("style"),L.appendChild(document.createTextNode(Qa)),r.document.head.appendChild(L));for(const x of j)$.classList.add(x);for(const x of R)$.classList.remove(x);b&&$.setAttribute(b.key,b.value),a&&(r.getComputedStyle(L).opacity,document.head.removeChild(L))});function N(m){var M;U(t,n,(M=h[m])!=null?M:m)}function B(m){e.onChanged?e.onChanged(m,N):N(m)}Be(S,B,{flush:"post",immediate:!0}),lr(()=>B(S.value));const p=ie({get(){return f?_.value:S.value},set(m){_.value=m}});try{return Object.assign(p,{store:_,system:v,state:S})}catch{return p}}function ef(e={}){const{valueDark:t="dark",valueLight:n="",window:s=He}=e,r=Za({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>r.system?r.system.value:Vo({window:s}).value?"dark":"light");return ie({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function ds(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function nu(e,t,n={}){const{window:s=He}=n;return cr(e,t,s==null?void 0:s.localStorage,n)}function Uo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const hs=new WeakMap;function su(e,t=!1){const n=oe(t);let s=null,r="";Be(Fo(e),l=>{const c=ds(ke(l));if(c){const f=c;if(hs.get(f)||hs.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ds(ke(e));!l||n.value||(si&&(s=It(l,"touchmove",c=>{tf(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ds(ke(e));!l||!n.value||(si&&(s==null||s()),l.style.overflow=r,hs.delete(l),n.value=!1)};return or(o),ie({get(){return n.value},set(l){l?i():o()}})}function ru(e,t,n={}){const{window:s=He}=n;return cr(e,t,s==null?void 0:s.sessionStorage,n)}function iu(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const s=oe(t.scrollX),r=oe(t.scrollY),i=ie({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return It(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function ou(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=oe(n),c=oe(s),f=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(f(),lr(f),It("resize",f,{passive:!0}),r){const a=Do("(orientation: portrait)");Be(a,()=>f())}return{width:l,height:c}}const ps={BASE_URL:"/ReefGuideAPI.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var gs={};const Bo=/^(?:[a-z]+:|\/\/)/i,nf="vitepress-theme-appearance",sf=/#.*$/,rf=/[?#].*$/,of=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",ko={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function lf(e,t,n=!1){if(t===void 0)return!1;if(e=ii(`/${e}`),n)return new RegExp(t).test(e);if(ii(t)!==e)return!1;const s=t.match(sf);return s?(ge?location.hash:"")===s[0]:!0}function ii(e){return decodeURI(e).replace(rf,"").replace(of,"$1")}function cf(e){return Bo.test(e)}function af(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!cf(n)&&lf(t,`/${n}/`,!0))||"root"}function ff(e,t){var s,r,i,o,l,c,f;const n=af(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Ko(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function Wo(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=uf(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function uf(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function df(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Ko(e,t){return[...e.filter(n=>!df(t,n)),...t]}const hf=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,pf=/^[a-z]:/i;function oi(e){const t=pf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(hf,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ms=new Set;function gf(e){if(ms.size===0){const n=typeof process=="object"&&(gs==null?void 0:gs.VITE_EXTRA_EXTENSIONS)||(ps==null?void 0:ps.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>ms.add(s))}const t=e.split(".").pop();return t==null||!ms.has(t.toLowerCase())}function lu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const mf=Symbol(),yt=zs(Ha);function cu(e){const t=ie(()=>ff(yt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?oe(!0):n?ef({storageKey:nf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),r=oe(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Be(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>Wo(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function yf(){const e=Pt(mf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function vf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function li(e){return Bo.test(e)||!e.startsWith("/")?e:vf(yt.value.base,e)}function bf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/ReefGuideAPI.jl/dev/";t=oi(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${oi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let An=[];function au(e){An.push(e),Kn(()=>{An=An.filter(t=>t!==e)})}function _f(){let e=yt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=ci(e,n);else if(Array.isArray(e))for(const s of e){const r=ci(s,n);if(r){t=r;break}}return t}function ci(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const wf=Symbol(),qo="http://a.com",Sf=()=>({path:"/",component:null,data:ko});function fu(e,t){const n=Un(Sf()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=ys(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==ys(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,l)))}let i=null;async function o(l,c=0,f=!1){var g;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const a=new URL(l,qo),h=i=a.pathname;try{let v=await e(h);if(!v)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:_,__pageData:S}=v;if(!_)throw new Error(`Invalid route component: ${_}`);n.path=ge?h:li(h),n.component=En(_),n.data=En(S),ge&&kn(()=>{let U=yt.value.base+S.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!yt.value.cleanUrls&&!U.endsWith("/")&&(U+=".html"),U!==a.pathname&&(a.pathname=U,l=U+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let N=null;try{N=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(B){console.warn(B)}if(N){ai(N,a.hash);return}}window.scrollTo(0,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!f)try{const _=await fetch(yt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await _.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ge?h:li(h),n.component=t?En(t):null;const _=ge?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...ko,relativePath:_}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:g,hash:v,search:_}=new URL(f,c.baseURI),S=new URL(location.href);h===S.origin&&gf(g)&&(l.preventDefault(),g===S.pathname&&_===S.search?(v!==S.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:S.href,newURL:a}))),v?ai(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(ys(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Ef(){const e=Pt(wf);if(!e)throw new Error("useRouter() is called without provider.");return e}function Go(){return Ef().route}function ai(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-_f()+i;requestAnimationFrame(r)}}function ys(e){const t=new URL(e,qo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),yt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const vs=()=>An.forEach(e=>e()),uu=Zs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Go(),{site:n}=yf();return()=>Ns(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Ns(t.component,{onVnodeMounted:vs,onVnodeUpdated:vs,onVnodeUnmounted:vs}):"404 Page Not Found"])}}),xf="modulepreload",Tf=function(e){return"/ReefGuideAPI.jl/dev/"+e},fi={},du=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Tf(c),c in fi)return;fi[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":xf,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,v)=>{h.addEventListener("load",g),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},hu=Zs({setup(e,{slots:t}){const n=oe(!1);return Lt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function pu(){ge&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function gu(){if(ge){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Cf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Cf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function mu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=bs(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(bs);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};rr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=Wo(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):bs(["meta",{name:"description",content:a}]),r(Ko(o.head,Rf(c)))})}function bs([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Af(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Rf(e){return e.filter(t=>!Af(t))}const _s=new Set,Yo=()=>document.createElement("link"),Of=e=>{const t=Yo();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Mf=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let _n;const Pf=ge&&(_n=Yo())&&_n.relList&&_n.relList.supports&&_n.relList.supports("prefetch")?Of:Mf;function yu(){if(!ge||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!_s.has(c)){_s.add(c);const f=bf(c);f&&Pf(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):_s.add(l))})})};Lt(s);const r=Go();Be(()=>r.path,s),Kn(()=>{n&&n.disconnect()})}export{Ji as $,_f as A,Ff as B,$f as C,zs as D,au as E,Se as F,le as G,Hf as H,Bo as I,Go as J,Xc as K,Pt as L,ou as M,Vs as N,tu as O,kn as P,iu as Q,ge as R,Bn as S,Kf as T,Nf as U,du as V,su as W,Ac as X,Yf as Y,jf as Z,Jf as _,xo as a,Gf as a0,Vf as a1,Un as a2,Ul as a3,Ns as a4,kf as a5,mu as a6,wf as a7,cu as a8,mf as a9,uu as aa,hu as ab,yt as ac,zf as ad,fu as ae,bf as af,yu as ag,gu as ah,pu as ai,ke as aj,$o as ak,Qf as al,or as am,eu as an,ru as ao,nu as ap,Zf as aq,Ef as ar,It as as,If as at,qf as au,ae as av,Lf as aw,En as ax,Xf as ay,lu as az,Is as b,Bf as c,Zs as d,Wf as e,gf as f,li as g,ie as h,cf as i,Eo as j,Hi as k,lf as l,Do as m,Us as n,Ps as o,oe as p,Be as q,Df as r,rr as s,al as t,yf as u,Lt as v,zl as w,Kn as x,Uf as y,hc as z}; diff --git a/dev/assets/chunks/framework.DT0TDSCa.js b/dev/assets/chunks/framework.DT0TDSCa.js new file mode 100644 index 0000000..b9dd16e --- /dev/null +++ b/dev/assets/chunks/framework.DT0TDSCa.js @@ -0,0 +1,18 @@ +/** +* @vue/shared v3.5.11 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function Hs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Z={},Tt=[],Ue=()=>{},zo=()=>!1,Zt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),$s=e=>e.startsWith("onUpdate:"),fe=Object.assign,Ds=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Jo=Object.prototype.hasOwnProperty,J=(e,t)=>Jo.call(e,t),K=Array.isArray,Ct=e=>Hn(e)==="[object Map]",fi=e=>Hn(e)==="[object Set]",q=e=>typeof e=="function",re=e=>typeof e=="string",st=e=>typeof e=="symbol",ne=e=>e!==null&&typeof e=="object",ui=e=>(ne(e)||q(e))&&q(e.then)&&q(e.catch),di=Object.prototype.toString,Hn=e=>di.call(e),Qo=e=>Hn(e).slice(8,-1),hi=e=>Hn(e)==="[object Object]",js=e=>re(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,At=Hs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$n=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Zo=/-(\w)/g,Ie=$n(e=>e.replace(Zo,(t,n)=>n?n.toUpperCase():"")),el=/\B([A-Z])/g,rt=$n(e=>e.replace(el,"-$1").toLowerCase()),Dn=$n(e=>e.charAt(0).toUpperCase()+e.slice(1)),wn=$n(e=>e?`on${Dn(e)}`:""),tt=(e,t)=>!Object.is(e,t),Sn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Ss=e=>{const t=parseFloat(e);return isNaN(t)?e:t},tl=e=>{const t=re(e)?Number(e):NaN;return isNaN(t)?e:t};let dr;const gi=()=>dr||(dr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Vs(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(sl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Us(e){let t="";if(re(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),cl=e=>re(e)?e:e==null?"":K(e)||ne(e)&&(e.toString===di||!q(e.toString))?yi(e)?cl(e.value):JSON.stringify(e,vi,2):String(e),vi=(e,t)=>yi(t)?vi(e,t.value):Ct(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[es(s,i)+" =>"]=r,n),{})}:fi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>es(n))}:st(t)?es(t):ne(t)&&!K(t)&&!hi(t)?String(t):t,es=(e,t="")=>{var n;return st(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.11 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let _e;class al{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=_e,!t&&_e&&(this.index=(_e.scopes||(_e.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0)return;if(jt){let t=jt;for(jt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Dt;){let t=Dt;for(Dt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Ei(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function xi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Ws(s),ul(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Es(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ti(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ti(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Kt))return;e.globalVersion=Kt;const t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!Es(e)){e.flags&=-3;return}const n=te,s=Ne;te=e,Ne=!0;try{Ei(e);const r=e.fn(e._value);(t.version===0||tt(r,e._value))&&(e._value=r,t.version++)}catch(r){throw t.version++,r}finally{te=n,Ne=s,xi(e),e.flags&=-3}}function Ws(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s),!n.subs&&n.computed){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ws(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function ul(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const Ci=[];function it(){Ci.push(Ne),Ne=!1}function ot(){const e=Ci.pop();Ne=e===void 0?!0:e}function hr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=te;te=void 0;try{t()}finally{te=n}}}let Kt=0;class dl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class jn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(t){if(!te||!Ne||te===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==te)n=this.activeLink=new dl(te,this),te.deps?(n.prevDep=te.depsTail,te.depsTail.nextDep=n,te.depsTail=n):te.deps=te.depsTail=n,Ai(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=te.depsTail,n.nextDep=void 0,te.depsTail.nextDep=n,te.depsTail=n,te.deps===n&&(te.deps=s)}return n}trigger(t){this.version++,Kt++,this.notify(t)}notify(t){Bs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{ks()}}}function Ai(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Ai(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Rn=new WeakMap,ht=Symbol(""),xs=Symbol(""),qt=Symbol("");function ve(e,t,n){if(Ne&&te){let s=Rn.get(e);s||Rn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new jn),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=Rn.get(e);if(!o){Kt++;return}const l=c=>{c&&c.trigger()};if(Bs(),t==="clear")o.forEach(l);else{const c=K(e),f=c&&js(n);if(c&&n==="length"){const a=Number(s);o.forEach((h,g)=>{(g==="length"||g===qt||!st(g)&&g>=a)&&l(h)})}else switch(n!==void 0&&l(o.get(n)),f&&l(o.get(qt)),t){case"add":c?f&&l(o.get("length")):(l(o.get(ht)),Ct(e)&&l(o.get(xs)));break;case"delete":c||(l(o.get(ht)),Ct(e)&&l(o.get(xs)));break;case"set":Ct(e)&&l(o.get(ht));break}}ks()}function hl(e,t){const n=Rn.get(e);return n&&n.get(t)}function _t(e){const t=z(e);return t===e?t:(ve(t,"iterate",qt),Pe(e)?t:t.map(me))}function Vn(e){return ve(e=z(e),"iterate",qt),e}const pl={__proto__:null,[Symbol.iterator](){return ns(this,Symbol.iterator,me)},concat(...e){return _t(this).concat(...e.map(t=>K(t)?_t(t):t))},entries(){return ns(this,"entries",e=>(e[1]=me(e[1]),e))},every(e,t){return We(this,"every",e,t,void 0,arguments)},filter(e,t){return We(this,"filter",e,t,n=>n.map(me),arguments)},find(e,t){return We(this,"find",e,t,me,arguments)},findIndex(e,t){return We(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return We(this,"findLast",e,t,me,arguments)},findLastIndex(e,t){return We(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return We(this,"forEach",e,t,void 0,arguments)},includes(...e){return ss(this,"includes",e)},indexOf(...e){return ss(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return ss(this,"lastIndexOf",e)},map(e,t){return We(this,"map",e,t,void 0,arguments)},pop(){return Ft(this,"pop")},push(...e){return Ft(this,"push",e)},reduce(e,...t){return pr(this,"reduce",e,t)},reduceRight(e,...t){return pr(this,"reduceRight",e,t)},shift(){return Ft(this,"shift")},some(e,t){return We(this,"some",e,t,void 0,arguments)},splice(...e){return Ft(this,"splice",e)},toReversed(){return _t(this).toReversed()},toSorted(e){return _t(this).toSorted(e)},toSpliced(...e){return _t(this).toSpliced(...e)},unshift(...e){return Ft(this,"unshift",e)},values(){return ns(this,"values",me)}};function ns(e,t,n){const s=Vn(e),r=s[t]();return s!==e&&!Pe(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const gl=Array.prototype;function We(e,t,n,s,r,i){const o=Vn(e),l=o!==e&&!Pe(e),c=o[t];if(c!==gl[t]){const h=c.apply(e,i);return l?me(h):h}let f=n;o!==e&&(l?f=function(h,g){return n.call(this,me(h),g,e)}:n.length>2&&(f=function(h,g){return n.call(this,h,g,e)}));const a=c.call(o,f,s);return l&&r?r(a):a}function pr(e,t,n,s){const r=Vn(e);let i=n;return r!==e&&(Pe(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,me(l),c,e)}),r[t](i,...s)}function ss(e,t,n){const s=z(e);ve(s,"iterate",qt);const r=s[t](...n);return(r===-1||r===!1)&&Ys(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function Ft(e,t,n=[]){it(),Bs();const s=z(e)[t].apply(e,n);return ks(),ot(),s}const ml=Hs("__proto__,__v_isRef,__isVue"),Ri=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(st));function yl(e){st(e)||(e=String(e));const t=z(this);return ve(t,"has",e),t.hasOwnProperty(e)}class Oi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Ml:Li:i?Ii:Pi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=pl[n]))return c;if(n==="hasOwnProperty")return yl}const l=Reflect.get(t,n,ae(t)?t:s);return(st(n)?Ri.has(n):ml(n))||(r||ve(t,"get",n),i)?l:ae(l)?o&&js(n)?l:l.value:ne(l)?r?kn(l):Bn(l):l}}class Mi extends Oi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const c=vt(i);if(!Pe(s)&&!vt(s)&&(i=z(i),s=z(s)),!K(t)&&ae(i)&&!ae(s))return c?!1:(i.value=s,!0)}const o=K(t)&&js(n)?Number(n)e,Un=e=>Reflect.getPrototypeOf(e);function cn(e,t,n=!1,s=!1){e=e.__v_raw;const r=z(e),i=z(t);n||(tt(t,i)&&ve(r,"get",t),ve(r,"get",i));const{has:o}=Un(r),l=s?Ks:n?Xs:me;if(o.call(r,t))return l(e.get(t));if(o.call(r,i))return l(e.get(i));e!==r&&e.get(t)}function an(e,t=!1){const n=this.__v_raw,s=z(n),r=z(e);return t||(tt(e,r)&&ve(s,"has",e),ve(s,"has",r)),e===r?n.has(e):n.has(e)||n.has(r)}function fn(e,t=!1){return e=e.__v_raw,!t&&ve(z(e),"iterate",ht),Reflect.get(e,"size",e)}function gr(e,t=!1){!t&&!Pe(e)&&!vt(e)&&(e=z(e));const n=z(this);return Un(n).has.call(n,e)||(n.add(e),Ge(n,"add",e,e)),this}function mr(e,t,n=!1){!n&&!Pe(t)&&!vt(t)&&(t=z(t));const s=z(this),{has:r,get:i}=Un(s);let o=r.call(s,e);o||(e=z(e),o=r.call(s,e));const l=i.call(s,e);return s.set(e,t),o?tt(t,l)&&Ge(s,"set",e,t):Ge(s,"add",e,t),this}function yr(e){const t=z(this),{has:n,get:s}=Un(t);let r=n.call(t,e);r||(e=z(e),r=n.call(t,e)),s&&s.call(t,e);const i=t.delete(e);return r&&Ge(t,"delete",e,void 0),i}function vr(){const e=z(this),t=e.size!==0,n=e.clear();return t&&Ge(e,"clear",void 0,void 0),n}function un(e,t){return function(s,r){const i=this,o=i.__v_raw,l=z(o),c=t?Ks:e?Xs:me;return!e&&ve(l,"iterate",ht),o.forEach((f,a)=>s.call(r,c(f),c(a),i))}}function dn(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=Ct(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,f=r[e](...s),a=n?Ks:t?Xs:me;return!t&&ve(i,"iterate",c?xs:ht),{next(){const{value:h,done:g}=f.next();return g?{value:h,done:g}:{value:l?[a(h[0]),a(h[1])]:a(h),done:g}},[Symbol.iterator](){return this}}}}function Xe(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Sl(){const e={get(i){return cn(this,i)},get size(){return fn(this)},has:an,add:gr,set:mr,delete:yr,clear:vr,forEach:un(!1,!1)},t={get(i){return cn(this,i,!1,!0)},get size(){return fn(this)},has:an,add(i){return gr.call(this,i,!0)},set(i,o){return mr.call(this,i,o,!0)},delete:yr,clear:vr,forEach:un(!1,!0)},n={get(i){return cn(this,i,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:un(!0,!1)},s={get(i){return cn(this,i,!0,!0)},get size(){return fn(this,!0)},has(i){return an.call(this,i,!0)},add:Xe("add"),set:Xe("set"),delete:Xe("delete"),clear:Xe("clear"),forEach:un(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=dn(i,!1,!1),n[i]=dn(i,!0,!1),t[i]=dn(i,!1,!0),s[i]=dn(i,!0,!0)}),[e,n,t,s]}const[El,xl,Tl,Cl]=Sl();function qs(e,t){const n=t?e?Cl:Tl:e?xl:El;return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(J(n,r)&&r in s?n:s,r,i)}const Al={get:qs(!1,!1)},Rl={get:qs(!1,!0)},Ol={get:qs(!0,!1)};const Pi=new WeakMap,Ii=new WeakMap,Li=new WeakMap,Ml=new WeakMap;function Pl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Il(e){return e.__v_skip||!Object.isExtensible(e)?0:Pl(Qo(e))}function Bn(e){return vt(e)?e:Gs(e,!1,bl,Al,Pi)}function Ll(e){return Gs(e,!1,wl,Rl,Ii)}function kn(e){return Gs(e,!0,_l,Ol,Li)}function Gs(e,t,n,s,r){if(!ne(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=r.get(e);if(i)return i;const o=Il(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return r.set(e,l),l}function pt(e){return vt(e)?pt(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function Pe(e){return!!(e&&e.__v_isShallow)}function Ys(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function En(e){return!J(e,"__v_skip")&&Object.isExtensible(e)&&pi(e,"__v_skip",!0),e}const me=e=>ne(e)?Bn(e):e,Xs=e=>ne(e)?kn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function oe(e){return Ni(e,!1)}function zs(e){return Ni(e,!0)}function Ni(e,t){return ae(e)?e:new Nl(e,t)}class Nl{constructor(t,n){this.dep=new jn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:me(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Pe(t)||vt(t);t=s?t:z(t),tt(t,n)&&(this._rawValue=t,this._value=s?t:me(t),this.dep.trigger())}}function Fi(e){return ae(e)?e.value:e}const Fl={get:(e,t,n)=>t==="__v_raw"?e:Fi(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Hi(e){return pt(e)?e:new Proxy(e,Fl)}class Hl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new jn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function $l(e){return new Hl(e)}class Dl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return hl(z(this._object),this._key)}}class jl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Vl(e,t,n){return ae(e)?e:q(e)?new jl(e):ne(e)&&arguments.length>1?Ul(e,t,n):oe(e)}function Ul(e,t,n){const s=e[t];return ae(s)?s:new Dl(e,t,n)}class Bl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new jn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Kt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&te!==this)return Si(this,!0),!0}get value(){const t=this.dep.track();return Ti(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function kl(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new Bl(s,r,n)}const hn={},On=new WeakMap;let ut;function Wl(e,t=!1,n=ut){if(n){let s=On.get(n);s||On.set(n,s=[]),s.push(e)}}function Kl(e,t,n=Z){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,f=m=>r?m:Pe(m)||r===!1||r===0?qe(m,1):qe(m);let a,h,g,v,_=!1,S=!1;if(ae(e)?(h=()=>e.value,_=Pe(e)):pt(e)?(h=()=>f(e),_=!0):K(e)?(S=!0,_=e.some(m=>pt(m)||Pe(m)),h=()=>e.map(m=>{if(ae(m))return m.value;if(pt(m))return f(m);if(q(m))return c?c(m,2):m()})):q(e)?t?h=c?()=>c(e,2):e:h=()=>{if(g){it();try{g()}finally{ot()}}const m=ut;ut=a;try{return c?c(e,3,[v]):e(v)}finally{ut=m}}:h=Ue,t&&r){const m=h,M=r===!0?1/0:r;h=()=>qe(m(),M)}const U=bi(),N=()=>{a.stop(),U&&Ds(U.effects,a)};if(i&&t){const m=t;t=(...M)=>{m(...M),N()}}let B=S?new Array(e.length).fill(hn):hn;const p=m=>{if(!(!(a.flags&1)||!a.dirty&&!m))if(t){const M=a.run();if(r||_||(S?M.some((F,$)=>tt(F,B[$])):tt(M,B))){g&&g();const F=ut;ut=a;try{const $=[M,B===hn?void 0:S&&B[0]===hn?[]:B,v];c?c(t,3,$):t(...$),B=M}finally{ut=F}}}else a.run()};return l&&l(p),a=new _i(h),a.scheduler=o?()=>o(p,!1):p,v=m=>Wl(m,!1,a),g=a.onStop=()=>{const m=On.get(a);if(m){if(c)c(m,4);else for(const M of m)M();On.delete(a)}},t?s?p(!0):B=a.run():o?o(p.bind(null,!0),!0):a.run(),N.pause=a.pause.bind(a),N.resume=a.resume.bind(a),N.stop=N,N}function qe(e,t=1/0,n){if(t<=0||!ne(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,ae(e))qe(e.value,t,n);else if(K(e))for(let s=0;s{qe(s,t,n)});else if(hi(e)){for(const s in e)qe(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&qe(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.11 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function en(e,t,n,s){try{return s?e(...s):e()}catch(r){tn(r,t,n)}}function Fe(e,t,n,s){if(q(e)){const r=en(e,t,n,s);return r&&ui(r)&&r.catch(i=>{tn(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=we[s],i=Gt(r);i=Gt(n)?we.push(e):we.splice(Gl(t),0,e),e.flags|=1,Di()}}function Di(){Mn||(Mn=$i.then(ji))}function Yl(e){K(e)?Rt.push(...e):Qe&&e.id===-1?Qe.splice(St+1,0,e):e.flags&1||(Rt.push(e),e.flags|=1),Di()}function br(e,t,n=je+1){for(;nGt(n)-Gt(s));if(Rt.length=0,Qe){Qe.push(...t);return}for(Qe=t,St=0;Ste.id==null?e.flags&2?-1:1/0:e.id;function ji(e){try{for(je=0;je{s._d&&Lr(-1);const i=In(t);let o;try{o=e(...r)}finally{In(i),s._d&&Lr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Pf(e,t){if(de===null)return e;const n=zn(de),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Vt=e=>e&&(e.disabled||e.disabled===""),zl=e=>e&&(e.defer||e.defer===""),_r=e=>typeof SVGElement<"u"&&e instanceof SVGElement,wr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ts=(e,t)=>{const n=e&&e.to;return re(n)?t?t(n):null:n},Jl={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,f){const{mc:a,pc:h,pbc:g,o:{insert:v,querySelector:_,createText:S,createComment:U}}=f,N=Vt(t.props);let{shapeFlag:B,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=S(""),F=t.anchor=S("");v(M,n,s),v(F,n,s);const $=(R,b)=>{B&16&&(r&&r.isCE&&(r.ce._teleportTarget=R),a(p,R,b,r,i,o,l,c))},j=()=>{const R=t.target=Ts(t.props,_),b=ki(R,t,S,v);R&&(o!=="svg"&&_r(R)?o="svg":o!=="mathml"&&wr(R)&&(o="mathml"),N||($(R,b),xn(t)))};N&&($(n,F),xn(t)),zl(t.props)?Ee(j,i):j()}else{t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,j=Vt(e.props),R=j?n:F,b=j?M:$;if(o==="svg"||_r(F)?o="svg":(o==="mathml"||wr(F))&&(o="mathml"),m?(g(e.dynamicChildren,m,R,r,i,o,l),nr(e,t,!0)):c||h(e,t,R,b,r,i,o,l,!1),N)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):pn(t,n,M,f,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const L=t.target=Ts(t.props,_);L&&pn(t,L,null,f,0)}else j&&pn(t,F,$,f,1);xn(t)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:f,targetAnchor:a,target:h,props:g}=e;if(h&&(r(f),r(a)),i&&r(c),o&16){const v=i||!Vt(g);for(let _=0;_{e.isMounted=!0}),zi(()=>{e.isUnmounting=!0}),e}const Re=[Function,Array],Wi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Re,onEnter:Re,onAfterEnter:Re,onEnterCancelled:Re,onBeforeLeave:Re,onLeave:Re,onAfterLeave:Re,onLeaveCancelled:Re,onBeforeAppear:Re,onAppear:Re,onAfterAppear:Re,onAppearCancelled:Re},Ki=e=>{const t=e.subTree;return t.component?Ki(t.component):t},ec={name:"BaseTransition",props:Wi,setup(e,{slots:t}){const n=Xn(),s=Zl();return()=>{const r=t.default&&Yi(t.default(),!0);if(!r||!r.length)return;const i=qi(r),o=z(e),{mode:l}=o;if(s.isLeaving)return rs(i);const c=Sr(i);if(!c)return rs(i);let f=Cs(c,o,s,n,g=>f=g);c.type!==ye&&Yt(c,f);const a=n.subTree,h=a&&Sr(a);if(h&&h.type!==ye&&!dt(c,h)&&Ki(n).type!==ye){const g=Cs(h,o,s,n);if(Yt(h,g),l==="out-in"&&c.type!==ye)return s.isLeaving=!0,g.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete g.afterLeave},rs(i);l==="in-out"&&c.type!==ye&&(g.delayLeave=(v,_,S)=>{const U=Gi(s,h);U[String(h.key)]=h,v[Ze]=()=>{_(),v[Ze]=void 0,delete f.delayedLeave},f.delayedLeave=S})}return i}}};function qi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ye){t=n;break}}return t}const tc=ec;function Gi(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Cs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:f,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:g,onLeave:v,onAfterLeave:_,onLeaveCancelled:S,onBeforeAppear:U,onAppear:N,onAfterAppear:B,onAppearCancelled:p}=t,m=String(e.key),M=Gi(n,e),F=(R,b)=>{R&&Fe(R,s,9,b)},$=(R,b)=>{const L=b[1];F(R,b),K(R)?R.every(x=>x.length<=1)&&L():R.length<=1&&L()},j={mode:o,persisted:l,beforeEnter(R){let b=c;if(!n.isMounted)if(i)b=U||c;else return;R[Ze]&&R[Ze](!0);const L=M[m];L&&dt(e,L)&&L.el[Ze]&&L.el[Ze](),F(b,[R])},enter(R){let b=f,L=a,x=h;if(!n.isMounted)if(i)b=N||f,L=B||a,x=p||h;else return;let W=!1;const se=R[gn]=ce=>{W||(W=!0,ce?F(x,[R]):F(L,[R]),j.delayedLeave&&j.delayedLeave(),R[gn]=void 0)};b?$(b,[R,se]):se()},leave(R,b){const L=String(e.key);if(R[gn]&&R[gn](!0),n.isUnmounting)return b();F(g,[R]);let x=!1;const W=R[Ze]=se=>{x||(x=!0,b(),se?F(S,[R]):F(_,[R]),R[Ze]=void 0,M[L]===e&&delete M[L])};M[L]=e,v?$(v,[R,W]):W()},clone(R){const b=Cs(R,t,n,s,r);return r&&r(b),b}};return j}function rs(e){if(nn(e))return e=nt(e),e.children=null,e}function Sr(e){if(!nn(e))return Bi(e.type)&&e.children?qi(e.children):e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function Yt(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Yt(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Yi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iLn(_,t&&(K(t)?t[S]:t),n,s,r));return}if(gt(s)&&!r)return;const i=s.shapeFlag&4?zn(s.component):s.el,o=r?null:i,{i:l,r:c}=e,f=t&&t.r,a=l.refs===Z?l.refs={}:l.refs,h=l.setupState,g=z(h),v=h===Z?()=>!1:_=>J(g,_);if(f!=null&&f!==c&&(re(f)?(a[f]=null,v(f)&&(h[f]=null)):ae(f)&&(f.value=null)),q(c))en(c,l,12,[o,a]);else{const _=re(c),S=ae(c);if(_||S){const U=()=>{if(e.f){const N=_?v(c)?h[c]:a[c]:c.value;r?K(N)&&Ds(N,i):K(N)?N.includes(i)||N.push(i):_?(a[c]=[i],v(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else _?(a[c]=o,v(c)&&(h[c]=o)):S&&(c.value=o,e.k&&(a[e.k]=o))};o?(U.id=-1,Ee(U,n)):U()}}}let Er=!1;const wt=()=>{Er||(console.error("Hydration completed but contains mismatches."),Er=!0)},nc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",sc=e=>e.namespaceURI.includes("MathML"),mn=e=>{if(e.nodeType===1){if(nc(e))return"svg";if(sc(e))return"mathml"}},xt=e=>e.nodeType===8;function rc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:f}}=e,a=(p,m)=>{if(!m.hasChildNodes()){n(null,p,m),Pn(),m._vnode=p;return}h(m.firstChild,p,null,null,null),Pn(),m._vnode=p},h=(p,m,M,F,$,j=!1)=>{j=j||!!m.dynamicChildren;const R=xt(p)&&p.data==="[",b=()=>S(p,m,M,F,$,R),{type:L,ref:x,shapeFlag:W,patchFlag:se}=m;let ce=p.nodeType;m.el=p,se===-2&&(j=!1,m.dynamicChildren=null);let V=null;switch(L){case mt:ce!==3?m.children===""?(c(m.el=r(""),o(p),p),V=p):V=b():(p.data!==m.children&&(wt(),p.data=m.children),V=i(p));break;case ye:B(p)?(V=i(p),N(m.el=p.content.firstChild,p,M)):ce!==8||R?V=b():V=i(p);break;case Bt:if(R&&(p=i(p),ce=p.nodeType),ce===1||ce===3){V=p;const Y=!m.children.length;for(let D=0;D{j=j||!!m.dynamicChildren;const{type:R,props:b,patchFlag:L,shapeFlag:x,dirs:W,transition:se}=m,ce=R==="input"||R==="option";if(ce||L!==-1){W&&Ve(m,null,M,"created");let V=!1;if(B(p)){V=po(F,se)&&M&&M.vnode.props&&M.vnode.props.appear;const D=p.content.firstChild;V&&se.beforeEnter(D),N(D,p,M),m.el=p=D}if(x&16&&!(b&&(b.innerHTML||b.textContent))){let D=v(p.firstChild,m,p,M,F,$,j);for(;D;){yn(p,1)||wt();const he=D;D=D.nextSibling,l(he)}}else if(x&8){let D=m.children;D[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(D=D.slice(1)),p.textContent!==D&&(yn(p,0)||wt(),p.textContent=m.children)}if(b){if(ce||!j||L&48){const D=p.tagName.includes("-");for(const he in b)(ce&&(he.endsWith("value")||he==="indeterminate")||Zt(he)&&!At(he)||he[0]==="."||D)&&s(p,he,null,b[he],void 0,M)}else if(b.onClick)s(p,"onClick",null,b.onClick,void 0,M);else if(L&4&&pt(b.style))for(const D in b.style)b.style[D]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Oe(Y,M,m),W&&Ve(m,null,M,"beforeMount"),((Y=b&&b.onVnodeMounted)||W||V)&&bo(()=>{Y&&Oe(Y,M,m),V&&se.enter(p),W&&Ve(m,null,M,"mounted")},F)}return p.nextSibling},v=(p,m,M,F,$,j,R)=>{R=R||!!m.dynamicChildren;const b=m.children,L=b.length;for(let x=0;x{const{slotScopeIds:R}=m;R&&($=$?$.concat(R):R);const b=o(p),L=v(i(p),m,b,M,F,$,j);return L&&xt(L)&&L.data==="]"?i(m.anchor=L):(wt(),c(m.anchor=f("]"),b,L),L)},S=(p,m,M,F,$,j)=>{if(yn(p.parentElement,1)||wt(),m.el=null,j){const L=U(p);for(;;){const x=i(p);if(x&&x!==L)l(x);else break}}const R=i(p),b=o(p);return l(p),n(null,m,b,R,M,F,mn(b),$),R},U=(p,m="[",M="]")=>{let F=0;for(;p;)if(p=i(p),p&&xt(p)&&(p.data===m&&F++,p.data===M)){if(F===0)return i(p);F--}return p},N=(p,m,M)=>{const F=m.parentNode;F&&F.replaceChild(p,m);let $=M;for(;$;)$.vnode.el===m&&($.vnode.el=$.subTree.el=p),$=$.parent},B=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,h]}const xr="data-allow-mismatch",ic={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function yn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(xr);)e=e.parentElement;const n=e&&e.getAttribute(xr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:n.split(",").includes(ic[t])}}function oc(e,t){if(xt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(xt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const gt=e=>!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Lf(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let f=null,a,h=0;const g=()=>(h++,f=null,v()),v=()=>{let _;return f||(_=f=t().catch(S=>{if(S=S instanceof Error?S:new Error(String(S)),c)return new Promise((U,N)=>{c(S,()=>U(g()),()=>N(S),h+1)});throw S}).then(S=>_!==f&&f?f:(S&&(S.__esModule||S[Symbol.toStringTag]==="Module")&&(S=S.default),a=S,S)))};return Qs({name:"AsyncComponentWrapper",__asyncLoader:v,__asyncHydrate(_,S,U){const N=i?()=>{const B=i(U,p=>oc(_,p));B&&(S.bum||(S.bum=[])).push(B)}:U;a?N():v().then(()=>!S.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const _=ue;if(Zs(_),a)return()=>is(a,_);const S=p=>{f=null,tn(p,_,13,!s)};if(l&&_.suspense||rn)return v().then(p=>()=>is(p,_)).catch(p=>(S(p),()=>s?le(s,{error:p}):null));const U=oe(!1),N=oe(),B=oe(!!r);return r&&setTimeout(()=>{B.value=!1},r),o!=null&&setTimeout(()=>{if(!U.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);S(p),N.value=p}},o),v().then(()=>{U.value=!0,_.parent&&nn(_.parent.vnode)&&_.parent.update()}).catch(p=>{S(p),N.value=p}),()=>{if(U.value&&a)return is(a,_);if(N.value&&s)return le(s,{error:N.value});if(n&&!B.value)return le(n)}}})}function is(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=le(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const nn=e=>e.type.__isKeepAlive;function lc(e,t){Xi(e,"a",t)}function cc(e,t){Xi(e,"da",t)}function Xi(e,t,n=ue){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Kn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)nn(r.parent.vnode)&&ac(s,t,n,r),r=r.parent}}function ac(e,t,n,s){const r=Kn(t,e,s,!0);qn(()=>{Ds(s[t],r)},n)}function Kn(e,t,n=ue,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{it();const l=sn(n),c=Fe(t,n,e,o);return l(),ot(),c});return s?r.unshift(i):r.push(i),i}}const Ye=e=>(t,n=ue)=>{(!rn||e==="sp")&&Kn(e,(...s)=>t(...s),n)},fc=Ye("bm"),It=Ye("m"),uc=Ye("bu"),dc=Ye("u"),zi=Ye("bum"),qn=Ye("um"),hc=Ye("sp"),pc=Ye("rtg"),gc=Ye("rtc");function mc(e,t=ue){Kn("ec",e,t)}const Ji="components";function Nf(e,t){return Zi(Ji,e,!0,t)||e}const Qi=Symbol.for("v-ndc");function Ff(e){return re(e)?Zi(Ji,e,!1)||e:e||Qi}function Zi(e,t,n=!0,s=!1){const r=de||ue;if(r){const i=r.type;{const l=ta(i,!1);if(l&&(l===t||l===Ie(t)||l===Dn(Ie(t))))return i}const o=Tr(r[e]||i[e],t)||Tr(r.appContext[e],t);return!o&&s?i:o}}function Tr(e,t){return e&&(e[t]||e[Ie(t)]||e[Dn(Ie(t))])}function Hf(e,t,n,s){let r;const i=n,o=K(e);if(o||re(e)){const l=o&&pt(e);let c=!1;l&&(c=!Pe(e),e=Vn(e)),r=new Array(e.length);for(let f=0,a=e.length;ft(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,f=l.length;czt(t)?!(t.type===ye||t.type===Se&&!eo(t.children)):!0)?e:null}function Df(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:wn(s)]=e[s];return n}const As=e=>e?xo(e)?zn(e):As(e.parent):null,Ut=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>As(e.parent),$root:e=>As(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>er(e),$forceUpdate:e=>e.f||(e.f=()=>{Js(e.update)}),$nextTick:e=>e.n||(e.n=Wn.bind(e.proxy)),$watch:e=>Dc.bind(e)}),os=(e,t)=>e!==Z&&!e.__isScriptSetup&&J(e,t),yc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;let f;if(t[0]!=="$"){const v=o[t];if(v!==void 0)switch(v){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(os(s,t))return o[t]=1,s[t];if(r!==Z&&J(r,t))return o[t]=2,r[t];if((f=e.propsOptions[0])&&J(f,t))return o[t]=3,i[t];if(n!==Z&&J(n,t))return o[t]=4,n[t];Rs&&(o[t]=0)}}const a=Ut[t];let h,g;if(a)return t==="$attrs"&&ve(e.attrs,"get",""),a(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==Z&&J(n,t))return o[t]=4,n[t];if(g=c.config.globalProperties,J(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return os(r,t)?(r[t]=n,!0):s!==Z&&J(s,t)?(s[t]=n,!0):J(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let l;return!!n[o]||e!==Z&&J(e,o)||os(t,o)||(l=i[0])&&J(l,o)||J(s,o)||J(Ut,o)||J(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:J(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function jf(){return vc().slots}function vc(){const e=Xn();return e.setupContext||(e.setupContext=Co(e))}function Cr(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Rs=!0;function bc(e){const t=er(e),n=e.proxy,s=e.ctx;Rs=!1,t.beforeCreate&&Ar(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:f,created:a,beforeMount:h,mounted:g,beforeUpdate:v,updated:_,activated:S,deactivated:U,beforeDestroy:N,beforeUnmount:B,destroyed:p,unmounted:m,render:M,renderTracked:F,renderTriggered:$,errorCaptured:j,serverPrefetch:R,expose:b,inheritAttrs:L,components:x,directives:W,filters:se}=t;if(f&&_c(f,s,null),o)for(const Y in o){const D=o[Y];q(D)&&(s[Y]=D.bind(n))}if(r){const Y=r.call(n,n);ne(Y)&&(e.data=Bn(Y))}if(Rs=!0,i)for(const Y in i){const D=i[Y],he=q(D)?D.bind(n,n):q(D.get)?D.get.bind(n,n):Ue,on=!q(D)&&q(D.set)?D.set.bind(n):Ue,lt=ie({get:he,set:on});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:$e=>lt.value=$e})}if(l)for(const Y in l)to(l[Y],s,n,Y);if(c){const Y=q(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(D=>{Cc(D,Y[D])})}a&&Ar(a,e,"c");function V(Y,D){K(D)?D.forEach(he=>Y(he.bind(n))):D&&Y(D.bind(n))}if(V(fc,h),V(It,g),V(uc,v),V(dc,_),V(lc,S),V(cc,U),V(mc,j),V(gc,F),V(pc,$),V(zi,B),V(qn,m),V(hc,R),K(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(D=>{Object.defineProperty(Y,D,{get:()=>n[D],set:he=>n[D]=he})})}else e.exposed||(e.exposed={});M&&e.render===Ue&&(e.render=M),L!=null&&(e.inheritAttrs=L),x&&(e.components=x),W&&(e.directives=W),R&&Zs(e)}function _c(e,t,n=Ue){K(e)&&(e=Os(e));for(const s in e){const r=e[s];let i;ne(r)?"default"in r?i=Mt(r.from||s,r.default,!0):i=Mt(r.from||s):i=Mt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Ar(e,t,n){Fe(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function to(e,t,n,s){let r=s.includes(".")?mo(n,s):()=>n[s];if(re(e)){const i=t[e];q(i)&&Be(r,i)}else if(q(e))Be(r,e.bind(n));else if(ne(e))if(K(e))e.forEach(i=>to(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Be(r,i,e)}}function er(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(f=>Nn(c,f,o,!0)),Nn(c,t,o)),ne(t)&&i.set(t,c),c}function Nn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Nn(e,i,n,!0),r&&r.forEach(o=>Nn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=wc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const wc={data:Rr,props:Or,emits:Or,methods:$t,computed:$t,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:$t,directives:$t,watch:Ec,provide:Rr,inject:Sc};function Rr(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Sc(e,t){return $t(Os(e),Os(t))}function Os(e){if(K(e)){const t={};for(let n=0;n1)return n&&q(t)?t.call(s&&s.proxy):t}}const so={},ro=()=>Object.create(so),io=e=>Object.getPrototypeOf(e)===so;function Ac(e,t,n,s=!1){const r={},i=ro();e.propsDefaults=Object.create(null),oo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Ll(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Rc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let f=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[g,v]=lo(h,t,!0);fe(o,g),v&&l.push(...v)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return ne(e)&&s.set(e,Tt),Tt;if(K(i))for(let a=0;ae[0]==="_"||e==="$stable",tr=e=>K(e)?e.map(Me):[Me(e)],Mc=(e,t,n)=>{if(t._n)return t;const s=Xl((...r)=>tr(t(...r)),n);return s._c=!1,s},ao=(e,t,n)=>{const s=e._ctx;for(const r in e){if(co(r))continue;const i=e[r];if(q(i))t[r]=Mc(r,i,s);else if(i!=null){const o=tr(i);t[r]=()=>o}}},fo=(e,t)=>{const n=tr(t);e.slots.default=()=>n},uo=(e,t,n)=>{for(const s in t)(n||s!=="_")&&(e[s]=t[s])},Pc=(e,t,n)=>{const s=e.slots=ro();if(e.vnode.shapeFlag&32){const r=t._;r?(uo(s,t,n),n&&pi(s,"_",r,!0)):ao(t,s)}else t&&fo(e,t)},Ic=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=Z;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:uo(r,t,n):(i=!t.$stable,ao(t,r)),o=t}else t&&(fo(e,t),o={default:1});if(i)for(const l in r)!co(l)&&o[l]==null&&delete r[l]},Ee=bo;function Lc(e){return ho(e)}function Nc(e){return ho(e,rc)}function ho(e,t){const n=gi();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:f,setElementText:a,parentNode:h,nextSibling:g,setScopeId:v=Ue,insertStaticContent:_}=e,S=(u,d,y,T=null,w=null,E=null,P=void 0,O=null,A=!!d.dynamicChildren)=>{if(u===d)return;u&&!dt(u,d)&&(T=ln(u),$e(u,w,E,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:C,ref:k,shapeFlag:I}=d;switch(C){case mt:U(u,d,y,T);break;case ye:N(u,d,y,T);break;case Bt:u==null&&B(d,y,T,P);break;case Se:x(u,d,y,T,w,E,P,O,A);break;default:I&1?M(u,d,y,T,w,E,P,O,A):I&6?W(u,d,y,T,w,E,P,O,A):(I&64||I&128)&&C.process(u,d,y,T,w,E,P,O,A,bt)}k!=null&&w&&Ln(k,u&&u.ref,E,d||u,!d)},U=(u,d,y,T)=>{if(u==null)s(d.el=l(d.children),y,T);else{const w=d.el=u.el;d.children!==u.children&&f(w,d.children)}},N=(u,d,y,T)=>{u==null?s(d.el=c(d.children||""),y,T):d.el=u.el},B=(u,d,y,T)=>{[u.el,u.anchor]=_(u.children,d,y,T,u.el,u.anchor)},p=({el:u,anchor:d},y,T)=>{let w;for(;u&&u!==d;)w=g(u),s(u,y,T),u=w;s(d,y,T)},m=({el:u,anchor:d})=>{let y;for(;u&&u!==d;)y=g(u),r(u),u=y;r(d)},M=(u,d,y,T,w,E,P,O,A)=>{d.type==="svg"?P="svg":d.type==="math"&&(P="mathml"),u==null?F(d,y,T,w,E,P,O,A):R(u,d,w,E,P,O,A)},F=(u,d,y,T,w,E,P,O)=>{let A,C;const{props:k,shapeFlag:I,transition:H,dirs:G}=u;if(A=u.el=o(u.type,E,k&&k.is,k),I&8?a(A,u.children):I&16&&j(u.children,A,null,T,w,ls(u,E),P,O),G&&Ve(u,null,T,"created"),$(A,u,u.scopeId,P,T),k){for(const ee in k)ee!=="value"&&!At(ee)&&i(A,ee,null,k[ee],E,T);"value"in k&&i(A,"value",null,k.value,E),(C=k.onVnodeBeforeMount)&&Oe(C,T,u)}G&&Ve(u,null,T,"beforeMount");const X=po(w,H);X&&H.beforeEnter(A),s(A,d,y),((C=k&&k.onVnodeMounted)||X||G)&&Ee(()=>{C&&Oe(C,T,u),X&&H.enter(A),G&&Ve(u,null,T,"mounted")},w)},$=(u,d,y,T,w)=>{if(y&&v(u,y),T)for(let E=0;E{for(let C=A;C{const O=d.el=u.el;let{patchFlag:A,dynamicChildren:C,dirs:k}=d;A|=u.patchFlag&16;const I=u.props||Z,H=d.props||Z;let G;if(y&&ct(y,!1),(G=H.onVnodeBeforeUpdate)&&Oe(G,y,d,u),k&&Ve(d,u,y,"beforeUpdate"),y&&ct(y,!0),(I.innerHTML&&H.innerHTML==null||I.textContent&&H.textContent==null)&&a(O,""),C?b(u.dynamicChildren,C,O,y,T,ls(d,w),E):P||D(u,d,O,null,y,T,ls(d,w),E,!1),A>0){if(A&16)L(O,I,H,y,w);else if(A&2&&I.class!==H.class&&i(O,"class",null,H.class,w),A&4&&i(O,"style",I.style,H.style,w),A&8){const X=d.dynamicProps;for(let ee=0;ee{G&&Oe(G,y,d,u),k&&Ve(d,u,y,"updated")},T)},b=(u,d,y,T,w,E,P)=>{for(let O=0;O{if(d!==y){if(d!==Z)for(const E in d)!At(E)&&!(E in y)&&i(u,E,d[E],null,w,T);for(const E in y){if(At(E))continue;const P=y[E],O=d[E];P!==O&&E!=="value"&&i(u,E,O,P,w,T)}"value"in y&&i(u,"value",d.value,y.value,w)}},x=(u,d,y,T,w,E,P,O,A)=>{const C=d.el=u?u.el:l(""),k=d.anchor=u?u.anchor:l("");let{patchFlag:I,dynamicChildren:H,slotScopeIds:G}=d;G&&(O=O?O.concat(G):G),u==null?(s(C,y,T),s(k,y,T),j(d.children||[],y,k,w,E,P,O,A)):I>0&&I&64&&H&&u.dynamicChildren?(b(u.dynamicChildren,H,y,w,E,P,O),(d.key!=null||w&&d===w.subTree)&&nr(u,d,!0)):D(u,d,y,k,w,E,P,O,A)},W=(u,d,y,T,w,E,P,O,A)=>{d.slotScopeIds=O,u==null?d.shapeFlag&512?w.ctx.activate(d,y,T,P,A):se(d,y,T,w,E,P,A):ce(u,d,A)},se=(u,d,y,T,w,E,P)=>{const O=u.component=Jc(u,T,w);if(nn(u)&&(O.ctx.renderer=bt),Qc(O,!1,P),O.asyncDep){if(w&&w.registerDep(O,V,P),!u.el){const A=O.subTree=le(ye);N(null,A,d,y)}}else V(O,u,d,y,w,E,P)},ce=(u,d,y)=>{const T=d.component=u.component;if(kc(u,d,y))if(T.asyncDep&&!T.asyncResolved){Y(T,d,y);return}else T.next=d,T.update();else d.el=u.el,T.vnode=d},V=(u,d,y,T,w,E,P)=>{const O=()=>{if(u.isMounted){let{next:I,bu:H,u:G,parent:X,vnode:ee}=u;{const Te=go(u);if(Te){I&&(I.el=ee.el,Y(u,I,P)),Te.asyncDep.then(()=>{u.isUnmounted||O()});return}}let Q=I,xe;ct(u,!1),I?(I.el=ee.el,Y(u,I,P)):I=ee,H&&Sn(H),(xe=I.props&&I.props.onVnodeBeforeUpdate)&&Oe(xe,X,I,ee),ct(u,!0);const pe=cs(u),Le=u.subTree;u.subTree=pe,S(Le,pe,h(Le.el),ln(Le),u,w,E),I.el=pe.el,Q===null&&Wc(u,pe.el),G&&Ee(G,w),(xe=I.props&&I.props.onVnodeUpdated)&&Ee(()=>Oe(xe,X,I,ee),w)}else{let I;const{el:H,props:G}=d,{bm:X,m:ee,parent:Q,root:xe,type:pe}=u,Le=gt(d);if(ct(u,!1),X&&Sn(X),!Le&&(I=G&&G.onVnodeBeforeMount)&&Oe(I,Q,d),ct(u,!0),H&&Zn){const Te=()=>{u.subTree=cs(u),Zn(H,u.subTree,u,w,null)};Le&&pe.__asyncHydrate?pe.__asyncHydrate(H,u,Te):Te()}else{xe.ce&&xe.ce._injectChildStyle(pe);const Te=u.subTree=cs(u);S(null,Te,y,T,u,w,E),d.el=Te.el}if(ee&&Ee(ee,w),!Le&&(I=G&&G.onVnodeMounted)){const Te=d;Ee(()=>Oe(I,Q,Te),w)}(d.shapeFlag&256||Q&>(Q.vnode)&&Q.vnode.shapeFlag&256)&&u.a&&Ee(u.a,w),u.isMounted=!0,d=y=T=null}};u.scope.on();const A=u.effect=new _i(O);u.scope.off();const C=u.update=A.run.bind(A),k=u.job=A.runIfDirty.bind(A);k.i=u,k.id=u.uid,A.scheduler=()=>Js(k),ct(u,!0),C()},Y=(u,d,y)=>{d.component=u;const T=u.vnode.props;u.vnode=d,u.next=null,Rc(u,d.props,T,y),Ic(u,d.children,y),it(),br(u),ot()},D=(u,d,y,T,w,E,P,O,A=!1)=>{const C=u&&u.children,k=u?u.shapeFlag:0,I=d.children,{patchFlag:H,shapeFlag:G}=d;if(H>0){if(H&128){on(C,I,y,T,w,E,P,O,A);return}else if(H&256){he(C,I,y,T,w,E,P,O,A);return}}G&8?(k&16&&Lt(C,w,E),I!==C&&a(y,I)):k&16?G&16?on(C,I,y,T,w,E,P,O,A):Lt(C,w,E,!0):(k&8&&a(y,""),G&16&&j(I,y,T,w,E,P,O,A))},he=(u,d,y,T,w,E,P,O,A)=>{u=u||Tt,d=d||Tt;const C=u.length,k=d.length,I=Math.min(C,k);let H;for(H=0;Hk?Lt(u,w,E,!0,!1,I):j(d,y,T,w,E,P,O,A,I)},on=(u,d,y,T,w,E,P,O,A)=>{let C=0;const k=d.length;let I=u.length-1,H=k-1;for(;C<=I&&C<=H;){const G=u[C],X=d[C]=A?et(d[C]):Me(d[C]);if(dt(G,X))S(G,X,y,null,w,E,P,O,A);else break;C++}for(;C<=I&&C<=H;){const G=u[I],X=d[H]=A?et(d[H]):Me(d[H]);if(dt(G,X))S(G,X,y,null,w,E,P,O,A);else break;I--,H--}if(C>I){if(C<=H){const G=H+1,X=GH)for(;C<=I;)$e(u[C],w,E,!0),C++;else{const G=C,X=C,ee=new Map;for(C=X;C<=H;C++){const Ce=d[C]=A?et(d[C]):Me(d[C]);Ce.key!=null&&ee.set(Ce.key,C)}let Q,xe=0;const pe=H-X+1;let Le=!1,Te=0;const Nt=new Array(pe);for(C=0;C=pe){$e(Ce,w,E,!0);continue}let De;if(Ce.key!=null)De=ee.get(Ce.key);else for(Q=X;Q<=H;Q++)if(Nt[Q-X]===0&&dt(Ce,d[Q])){De=Q;break}De===void 0?$e(Ce,w,E,!0):(Nt[De-X]=C+1,De>=Te?Te=De:Le=!0,S(Ce,d[De],y,null,w,E,P,O,A),xe++)}const fr=Le?Fc(Nt):Tt;for(Q=fr.length-1,C=pe-1;C>=0;C--){const Ce=X+C,De=d[Ce],ur=Ce+1{const{el:E,type:P,transition:O,children:A,shapeFlag:C}=u;if(C&6){lt(u.component.subTree,d,y,T);return}if(C&128){u.suspense.move(d,y,T);return}if(C&64){P.move(u,d,y,bt);return}if(P===Se){s(E,d,y);for(let I=0;IO.enter(E),w);else{const{leave:I,delayLeave:H,afterLeave:G}=O,X=()=>s(E,d,y),ee=()=>{I(E,()=>{X(),G&&G()})};H?H(E,X,ee):ee()}else s(E,d,y)},$e=(u,d,y,T=!1,w=!1)=>{const{type:E,props:P,ref:O,children:A,dynamicChildren:C,shapeFlag:k,patchFlag:I,dirs:H,cacheIndex:G}=u;if(I===-2&&(w=!1),O!=null&&Ln(O,null,y,u,!0),G!=null&&(d.renderCache[G]=void 0),k&256){d.ctx.deactivate(u);return}const X=k&1&&H,ee=!gt(u);let Q;if(ee&&(Q=P&&P.onVnodeBeforeUnmount)&&Oe(Q,d,u),k&6)Xo(u.component,y,T);else{if(k&128){u.suspense.unmount(y,T);return}X&&Ve(u,null,d,"beforeUnmount"),k&64?u.type.remove(u,d,y,bt,T):C&&!C.hasOnce&&(E!==Se||I>0&&I&64)?Lt(C,d,y,!1,!0):(E===Se&&I&384||!w&&k&16)&&Lt(A,d,y),T&&cr(u)}(ee&&(Q=P&&P.onVnodeUnmounted)||X)&&Ee(()=>{Q&&Oe(Q,d,u),X&&Ve(u,null,d,"unmounted")},y)},cr=u=>{const{type:d,el:y,anchor:T,transition:w}=u;if(d===Se){Yo(y,T);return}if(d===Bt){m(u);return}const E=()=>{r(y),w&&!w.persisted&&w.afterLeave&&w.afterLeave()};if(u.shapeFlag&1&&w&&!w.persisted){const{leave:P,delayLeave:O}=w,A=()=>P(y,E);O?O(u.el,E,A):A()}else E()},Yo=(u,d)=>{let y;for(;u!==d;)y=g(u),r(u),u=y;r(d)},Xo=(u,d,y)=>{const{bum:T,scope:w,job:E,subTree:P,um:O,m:A,a:C}=u;Pr(A),Pr(C),T&&Sn(T),w.stop(),E&&(E.flags|=8,$e(P,u,d,y)),O&&Ee(O,d),Ee(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},Lt=(u,d,y,T=!1,w=!1,E=0)=>{for(let P=E;P{if(u.shapeFlag&6)return ln(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const d=g(u.anchor||u.el),y=d&&d[Ui];return y?g(y):d};let Jn=!1;const ar=(u,d,y)=>{u==null?d._vnode&&$e(d._vnode,null,null,!0):S(d._vnode||null,u,d,null,null,null,y),d._vnode=u,Jn||(Jn=!0,br(),Pn(),Jn=!1)},bt={p:S,um:$e,m:lt,r:cr,mt:se,mc:j,pc:D,pbc:b,n:ln,o:e};let Qn,Zn;return t&&([Qn,Zn]=t(bt)),{render:ar,hydrate:Qn,createApp:Tc(ar,Qn)}}function ls({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ct({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function po(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function nr(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function go(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:go(t)}function Pr(e){if(e)for(let t=0;tMt(Hc);function sr(e,t){return Gn(e,null,t)}function Vf(e,t){return Gn(e,null,{flush:"post"})}function Be(e,t,n){return Gn(e,t,n)}function Gn(e,t,n=Z){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n);let c;if(rn)if(i==="sync"){const g=$c();c=g.__watcherHandles||(g.__watcherHandles=[])}else if(!t||s)l.once=!0;else{const g=()=>{};return g.stop=Ue,g.resume=Ue,g.pause=Ue,g}const f=ue;l.call=(g,v,_)=>Fe(g,f,v,_);let a=!1;i==="post"?l.scheduler=g=>{Ee(g,f&&f.suspense)}:i!=="sync"&&(a=!0,l.scheduler=(g,v)=>{v?g():Js(g)}),l.augmentJob=g=>{t&&(g.flags|=4),a&&(g.flags|=2,f&&(g.id=f.uid,g.i=f))};const h=Kl(e,t,l);return c&&c.push(h),h}function Dc(e,t,n){const s=this.proxy,r=re(e)?e.includes(".")?mo(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=sn(this),l=Gn(r,i.bind(s),n);return o(),l}function mo(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;rt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${rt(t)}Modifiers`];function Vc(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Z;let r=n;const i=t.startsWith("update:"),o=i&&jc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>re(a)?a.trim():a)),o.number&&(r=n.map(Ss)));let l,c=s[l=wn(t)]||s[l=wn(Ie(t))];!c&&i&&(c=s[l=wn(rt(t))]),c&&Fe(c,e,6,r);const f=s[l+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Fe(f,e,6,r)}}function yo(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=f=>{const a=yo(f,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(ne(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),ne(e)&&s.set(e,o),o)}function Yn(e,t){return!e||!Zt(t)?!1:(t=t.slice(2).replace(/Once$/,""),J(e,t[0].toLowerCase()+t.slice(1))||J(e,rt(t))||J(e,t))}function cs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:f,renderCache:a,props:h,data:g,setupState:v,ctx:_,inheritAttrs:S}=e,U=In(e);let N,B;try{if(n.shapeFlag&4){const m=r||s,M=m;N=Me(f.call(M,m,a,h,v,g,_)),B=l}else{const m=t;N=Me(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),B=t.props?l:Uc(l)}}catch(m){kt.length=0,tn(m,e,1),N=le(ye)}let p=N;if(B&&S!==!1){const m=Object.keys(B),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some($s)&&(B=Bc(B,i)),p=nt(p,B,!1,!0))}return n.dirs&&(p=nt(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&Yt(p,n.transition),N=p,In(U),N}const Uc=e=>{let t;for(const n in e)(n==="class"||n==="style"||Zt(n))&&((t||(t={}))[n]=e[n]);return t},Bc=(e,t)=>{const n={};for(const s in e)(!$s(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function kc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,f=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Ir(s,o,f):!!o;if(c&8){const a=t.dynamicProps;for(let h=0;he.__isSuspense;function bo(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):Yl(e)}const Se=Symbol.for("v-fgt"),mt=Symbol.for("v-txt"),ye=Symbol.for("v-cmt"),Bt=Symbol.for("v-stc"),kt=[];let Ae=null;function Ps(e=!1){kt.push(Ae=e?null:[])}function Kc(){kt.pop(),Ae=kt[kt.length-1]||null}let Xt=1;function Lr(e){Xt+=e,e<0&&Ae&&(Ae.hasOnce=!0)}function _o(e){return e.dynamicChildren=Xt>0?Ae||Tt:null,Kc(),Xt>0&&Ae&&Ae.push(e),e}function Uf(e,t,n,s,r,i){return _o(So(e,t,n,s,r,i,!0))}function Is(e,t,n,s,r){return _o(le(e,t,n,s,r,!0))}function zt(e){return e?e.__v_isVNode===!0:!1}function dt(e,t){return e.type===t.type&&e.key===t.key}const wo=({key:e})=>e??null,Tn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?re(e)||ae(e)||q(e)?{i:de,r:e,k:t,f:!!n}:e:null);function So(e,t=null,n=null,s=0,r=null,i=e===Se?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&wo(t),ref:t&&Tn(t),scopeId:Vi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:de};return l?(rr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=re(n)?8:16),Xt>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const le=qc;function qc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Qi)&&(e=ye),zt(e)){const l=nt(e,t,!0);return n&&rr(l,n),Xt>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(na(e)&&(e=e.__vccOpts),t){t=Gc(t);let{class:l,style:c}=t;l&&!re(l)&&(t.class=Us(l)),ne(c)&&(Ys(c)&&!K(c)&&(c=fe({},c)),t.style=Vs(c))}const o=re(e)?1:vo(e)?128:Bi(e)?64:ne(e)?4:q(e)?2:0;return So(e,t,n,s,r,o,i,!0)}function Gc(e){return e?Ys(e)||io(e)?fe({},e):e:null}function nt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,f=t?Yc(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&wo(f),ref:t&&t.ref?n&&i?K(i)?i.concat(Tn(t)):[i,Tn(t)]:Tn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&nt(e.ssContent),ssFallback:e.ssFallback&&nt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Yt(a,c.clone(a)),a}function Eo(e=" ",t=0){return le(mt,null,e,t)}function Bf(e,t){const n=le(Bt,null,e);return n.staticCount=t,n}function kf(e="",t=!1){return t?(Ps(),Is(ye,null,e)):le(ye,null,e)}function Me(e){return e==null||typeof e=="boolean"?le(ye):K(e)?le(Se,null,e.slice()):zt(e)?et(e):le(mt,null,String(e))}function et(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:nt(e)}function rr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),rr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!io(t)?t._ctx=de:r===3&&de&&(de.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:de},n=32):(t=String(t),s&64?(n=16,t=[Eo(t)]):n=8);e.children=t,e.shapeFlag|=n}function Yc(...e){const t={};for(let n=0;nue||de;let Fn,Ls;{const e=gi(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Fn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Ls=t("__VUE_SSR_SETTERS__",n=>rn=n)}const sn=e=>{const t=ue;return Fn(e),e.scope.on(),()=>{e.scope.off(),Fn(t)}},Nr=()=>{ue&&ue.scope.off(),Fn(null)};function xo(e){return e.vnode.shapeFlag&4}let rn=!1;function Qc(e,t=!1,n=!1){t&&Ls(t);const{props:s,children:r}=e.vnode,i=xo(e);Ac(e,s,i,t),Pc(e,r,n);const o=i?Zc(e,t):void 0;return t&&Ls(!1),o}function Zc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,yc);const{setup:s}=n;if(s){const r=e.setupContext=s.length>1?Co(e):null,i=sn(e);it();const o=en(s,e,0,[e.props,r]);if(ot(),i(),ui(o)){if(gt(e)||Zs(e),o.then(Nr,Nr),t)return o.then(l=>{Fr(e,l,t)}).catch(l=>{tn(l,e,0)});e.asyncDep=o}else Fr(e,o,t)}else To(e,t)}function Fr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:ne(t)&&(e.setupState=Hi(t)),To(e,n)}let Hr;function To(e,t,n){const s=e.type;if(!e.render){if(!t&&Hr&&!s.render){const r=s.template||er(e).template;if(r){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,f=fe(fe({isCustomElement:i,delimiters:l},o),c);s.render=Hr(r,f)}}e.render=s.render||Ue}{const r=sn(e);it();try{bc(e)}finally{ot(),r()}}}const ea={get(e,t){return ve(e,"get",""),e[t]}};function Co(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,ea),slots:e.slots,emit:e.emit,expose:t}}function zn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Hi(En(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ut)return Ut[n](e)},has(t,n){return n in t||n in Ut}})):e.proxy}function ta(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function na(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>kl(e,t,rn);function Ns(e,t,n){const s=arguments.length;return s===2?ne(t)&&!K(t)?zt(t)?le(e,null,[t]):le(e,t):le(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&zt(n)&&(n=[n]),le(e,t,n))}const sa="3.5.11";/** +* @vue/runtime-dom v3.5.11 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Fs;const $r=typeof window<"u"&&window.trustedTypes;if($r)try{Fs=$r.createPolicy("vue",{createHTML:e=>e})}catch{}const Ao=Fs?e=>Fs.createHTML(e):e=>e,ra="http://www.w3.org/2000/svg",ia="http://www.w3.org/1998/Math/MathML",Ke=typeof document<"u"?document:null,Dr=Ke&&Ke.createElement("template"),oa={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ke.createElementNS(ra,e):t==="mathml"?Ke.createElementNS(ia,e):n?Ke.createElement(e,{is:n}):Ke.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ke.createTextNode(e),createComment:e=>Ke.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ke.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Dr.innerHTML=Ao(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Dr.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ze="transition",Ht="animation",Jt=Symbol("_vtc"),Ro={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},la=fe({},Wi,Ro),ca=e=>(e.displayName="Transition",e.props=la,e),Wf=ca((e,{slots:t})=>Ns(tc,aa(e),t)),at=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},jr=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function aa(e){const t={};for(const x in e)x in Ro||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:f=o,appearToClass:a=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=e,_=fa(r),S=_&&_[0],U=_&&_[1],{onBeforeEnter:N,onEnter:B,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:F=N,onAppear:$=B,onAppearCancelled:j=p}=t,R=(x,W,se)=>{ft(x,W?a:l),ft(x,W?f:o),se&&se()},b=(x,W)=>{x._isLeaving=!1,ft(x,h),ft(x,v),ft(x,g),W&&W()},L=x=>(W,se)=>{const ce=x?$:B,V=()=>R(W,x,se);at(ce,[W,V]),Vr(()=>{ft(W,x?c:i),Je(W,x?a:l),jr(ce)||Ur(W,s,S,V)})};return fe(t,{onBeforeEnter(x){at(N,[x]),Je(x,i),Je(x,o)},onBeforeAppear(x){at(F,[x]),Je(x,c),Je(x,f)},onEnter:L(!1),onAppear:L(!0),onLeave(x,W){x._isLeaving=!0;const se=()=>b(x,W);Je(x,h),Je(x,g),ha(),Vr(()=>{x._isLeaving&&(ft(x,h),Je(x,v),jr(m)||Ur(x,s,U,se))}),at(m,[x,se])},onEnterCancelled(x){R(x,!1),at(p,[x])},onAppearCancelled(x){R(x,!0),at(j,[x])},onLeaveCancelled(x){b(x),at(M,[x])}})}function fa(e){if(e==null)return null;if(ne(e))return[as(e.enter),as(e.leave)];{const t=as(e);return[t,t]}}function as(e){return tl(e)}function Je(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Jt]||(e[Jt]=new Set)).add(t)}function ft(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Jt];n&&(n.delete(t),n.size||(e[Jt]=void 0))}function Vr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let ua=0;function Ur(e,t,n,s){const r=e._endId=++ua,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=da(e,t);if(!o)return s();const f=o+"end";let a=0;const h=()=>{e.removeEventListener(f,g),i()},g=v=>{v.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[_]||"").split(", "),r=s(`${ze}Delay`),i=s(`${ze}Duration`),o=Br(r,i),l=s(`${Ht}Delay`),c=s(`${Ht}Duration`),f=Br(l,c);let a=null,h=0,g=0;t===ze?o>0&&(a=ze,h=o,g=i.length):t===Ht?f>0&&(a=Ht,h=f,g=c.length):(h=Math.max(o,f),a=h>0?o>f?ze:Ht:null,g=a?a===ze?i.length:c.length:0);const v=a===ze&&/\b(transform|all)(,|$)/.test(s(`${ze}Property`).toString());return{type:a,timeout:h,propCount:g,hasTransform:v}}function Br(e,t){for(;e.lengthkr(n)+kr(e[s])))}function kr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ha(){return document.body.offsetHeight}function pa(e,t,n){const s=e[Jt];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Wr=Symbol("_vod"),ga=Symbol("_vsh"),ma=Symbol(""),ya=/(^|;)\s*display\s*:/;function va(e,t,n){const s=e.style,r=re(n);let i=!1;if(n&&!r){if(t)if(re(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Cn(s,l,"")}else for(const o in t)n[o]==null&&Cn(s,o,"");for(const o in n)o==="display"&&(i=!0),Cn(s,o,n[o])}else if(r){if(t!==n){const o=s[ma];o&&(n+=";"+o),s.cssText=n,i=ya.test(n)}}else t&&e.removeAttribute("style");Wr in e&&(e[Wr]=i?s.display:"",e[ga]&&(s.display="none"))}const Kr=/\s*!important$/;function Cn(e,t,n){if(K(n))n.forEach(s=>Cn(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=ba(e,t);Kr.test(n)?e.setProperty(rt(s),n.replace(Kr,""),"important"):e[s]=n}}const qr=["Webkit","Moz","ms"],fs={};function ba(e,t){const n=fs[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return fs[t]=s;s=Dn(s);for(let r=0;rus||(Ea.then(()=>us=0),us=Date.now());function Ta(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Fe(Ca(s,n.value),t,5,[s])};return n.value=e,n.attached=xa(),n}function Ca(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const Qr=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Aa=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?pa(e,s,o):t==="style"?va(e,n,s):Zt(t)?$s(t)||wa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Ra(e,t,s,o))?(Xr(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Yr(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!re(s))?Xr(e,Ie(t),s):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Yr(e,t,s,o))};function Ra(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Qr(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return Qr(t)&&re(n)?!1:t in e}const Zr=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Sn(t,n):t};function Oa(e){e.target.composing=!0}function ei(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const ds=Symbol("_assign"),Kf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[ds]=Zr(r);const i=s||r.props&&r.props.type==="number";Et(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),i&&(l=Ss(l)),e[ds](l)}),n&&Et(e,"change",()=>{e.value=e.value.trim()}),t||(Et(e,"compositionstart",Oa),Et(e,"compositionend",ei),Et(e,"change",ei))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[ds]=Zr(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Ss(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Ma=["ctrl","shift","alt","meta"],Pa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ma.some(n=>e[`${n}Key`]&&!t.includes(n))},qf=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=rt(r.key);if(t.some(o=>o===i||Ia[o]===i))return e(r)})},Oo=fe({patchProp:Aa},oa);let Wt,ti=!1;function La(){return Wt||(Wt=Lc(Oo))}function Na(){return Wt=ti?Wt:Nc(Oo),ti=!0,Wt}const Yf=(...e)=>{const t=La().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Po(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Mo(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},Xf=(...e)=>{const t=Na().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Po(s);if(r)return n(r,!0,Mo(r))},t};function Mo(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Po(e){return re(e)?document.querySelector(e):e}const zf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Fa=window.__VP_SITE_DATA__;function ir(e){return bi()?(fl(e),!0):!1}function ke(e){return typeof e=="function"?e():Fi(e)}const Io=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Jf=e=>e!=null,Ha=Object.prototype.toString,$a=e=>Ha.call(e)==="[object Object]",Qt=()=>{},ni=Da();function Da(){var e,t;return Io&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ja(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const Lo=e=>e();function Va(e,t={}){let n,s,r=Qt;const i=l=>{clearTimeout(l),r(),r=Qt};return l=>{const c=ke(e),f=ke(t.maxWait);return n&&i(n),c<=0||f!==void 0&&f<=0?(s&&(i(s),s=null),Promise.resolve(l())):new Promise((a,h)=>{r=t.rejectOnCancel?h:a,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,a(l())},f)),n=setTimeout(()=>{s&&i(s),s=null,a(l())},c)})}}function Ua(e=Lo){const t=oe(!0);function n(){t.value=!1}function s(){t.value=!0}const r=(...i)=>{t.value&&e(...i)};return{isActive:kn(t),pause:n,resume:s,eventFilter:r}}function Ba(e){return Xn()}function No(...e){if(e.length!==1)return Vl(...e);const t=e[0];return typeof t=="function"?kn($l(()=>({get:t,set:Qt}))):oe(t)}function Fo(e,t,n={}){const{eventFilter:s=Lo,...r}=n;return Be(e,ja(s,t),r)}function ka(e,t,n={}){const{eventFilter:s,...r}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Ua(s);return{stop:Fo(e,t,{...r,eventFilter:i}),pause:o,resume:l,isActive:c}}function or(e,t=!0,n){Ba()?It(e,n):t?e():Wn(e)}function Qf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Fo(e,t,{...i,eventFilter:Va(s,{maxWait:r})})}function Zf(e,t,n){let s;ae(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=Qt}=s,c=oe(!r),f=o?zs(t):oe(t);let a=0;return sr(async h=>{if(!c.value)return;a++;const g=a;let v=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const _=await e(S=>{h(()=>{i&&(i.value=!1),v||S()})});g===a&&(f.value=_)}catch(_){l(_)}finally{i&&g===a&&(i.value=!1),v=!0}}),r?ie(()=>(c.value=!0,f.value)):f}const He=Io?window:void 0;function Ho(e){var t;const n=ke(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Pt(...e){let t,n,s,r;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,s,r]=e,t=He):[t,n,s,r]=e,!t)return Qt;Array.isArray(n)||(n=[n]),Array.isArray(s)||(s=[s]);const i=[],o=()=>{i.forEach(a=>a()),i.length=0},l=(a,h,g,v)=>(a.addEventListener(h,g,v),()=>a.removeEventListener(h,g,v)),c=Be(()=>[Ho(t),ke(r)],([a,h])=>{if(o(),!a)return;const g=$a(h)?{...h}:h;i.push(...n.flatMap(v=>s.map(_=>l(a,v,_,g))))},{immediate:!0,flush:"post"}),f=()=>{c(),o()};return ir(f),f}function Wa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function eu(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=He,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=Wa(t);return Pt(r,i,a=>{a.repeat&&ke(l)||c(a)&&n(a)},o)}function Ka(){const e=oe(!1),t=Xn();return t&&It(()=>{e.value=!0},t),e}function qa(e){const t=Ka();return ie(()=>(t.value,!!e()))}function $o(e,t={}){const{window:n=He}=t,s=qa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let r;const i=oe(!1),o=f=>{i.value=f.matches},l=()=>{r&&("removeEventListener"in r?r.removeEventListener("change",o):r.removeListener(o))},c=sr(()=>{s.value&&(l(),r=n.matchMedia(ke(e)),"addEventListener"in r?r.addEventListener("change",o):r.addListener(o),i.value=r.matches)});return ir(()=>{c(),l(),r=void 0}),i}const vn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bn="__vueuse_ssr_handlers__",Ga=Ya();function Ya(){return bn in vn||(vn[bn]=vn[bn]||{}),vn[bn]}function Do(e,t){return Ga[e]||t}function jo(e){return $o("(prefers-color-scheme: dark)",e)}function Xa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const za={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},si="vueuse-storage";function lr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:f=!1,shallow:a,window:h=He,eventFilter:g,onError:v=b=>{console.error(b)},initOnMounted:_}=s,S=(a?zs:oe)(typeof t=="function"?t():t);if(!n)try{n=Do("getDefaultStorage",()=>{var b;return(b=He)==null?void 0:b.localStorage})()}catch(b){v(b)}if(!n)return S;const U=ke(t),N=Xa(U),B=(r=s.serializer)!=null?r:za[N],{pause:p,resume:m}=ka(S,()=>F(S.value),{flush:i,deep:o,eventFilter:g});h&&l&&or(()=>{n instanceof Storage?Pt(h,"storage",j):Pt(h,si,R),_&&j()}),_||j();function M(b,L){if(h){const x={key:e,oldValue:b,newValue:L,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(si,{detail:x}))}}function F(b){try{const L=n.getItem(e);if(b==null)M(L,null),n.removeItem(e);else{const x=B.write(b);L!==x&&(n.setItem(e,x),M(L,x))}}catch(L){v(L)}}function $(b){const L=b?b.newValue:n.getItem(e);if(L==null)return c&&U!=null&&n.setItem(e,B.write(U)),U;if(!b&&f){const x=B.read(L);return typeof f=="function"?f(x,U):N==="object"&&!Array.isArray(x)?{...U,...x}:x}else return typeof L!="string"?L:B.read(L)}function j(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){S.value=U;return}if(!(b&&b.key!==e)){p();try{(b==null?void 0:b.newValue)!==B.write(S.value)&&(S.value=$(b))}catch(L){v(L)}finally{b?Wn(m):m()}}}}function R(b){j(b.detail)}return S}const Ja="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function Qa(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=He,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:f,disableTransition:a=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},g=jo({window:r}),v=ie(()=>g.value?"dark":"light"),_=c||(o==null?No(s):lr(o,s,i,{window:r,listenToStorageChanges:l})),S=ie(()=>_.value==="auto"?v.value:_.value),U=Do("updateHTMLAttrs",(m,M,F)=>{const $=typeof m=="string"?r==null?void 0:r.document.querySelector(m):Ho(m);if(!$)return;const j=new Set,R=new Set;let b=null;if(M==="class"){const x=F.split(/\s/g);Object.values(h).flatMap(W=>(W||"").split(/\s/g)).filter(Boolean).forEach(W=>{x.includes(W)?j.add(W):R.add(W)})}else b={key:M,value:F};if(j.size===0&&R.size===0&&b===null)return;let L;a&&(L=r.document.createElement("style"),L.appendChild(document.createTextNode(Ja)),r.document.head.appendChild(L));for(const x of j)$.classList.add(x);for(const x of R)$.classList.remove(x);b&&$.setAttribute(b.key,b.value),a&&(r.getComputedStyle(L).opacity,document.head.removeChild(L))});function N(m){var M;U(t,n,(M=h[m])!=null?M:m)}function B(m){e.onChanged?e.onChanged(m,N):N(m)}Be(S,B,{flush:"post",immediate:!0}),or(()=>B(S.value));const p=ie({get(){return f?_.value:S.value},set(m){_.value=m}});try{return Object.assign(p,{store:_,system:v,state:S})}catch{return p}}function Za(e={}){const{valueDark:t="dark",valueLight:n="",window:s=He}=e,r=Qa({...e,onChanged:(l,c)=>{var f;e.onChanged?(f=e.onChanged)==null||f.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>r.system?r.system.value:jo({window:s}).value?"dark":"light");return ie({get(){return r.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?r.value="auto":r.value=c}})}function hs(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function tu(e,t,n={}){const{window:s=He}=n;return lr(e,t,s==null?void 0:s.localStorage,n)}function Vo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const ps=new WeakMap;function nu(e,t=!1){const n=oe(t);let s=null,r="";Be(No(e),l=>{const c=hs(ke(l));if(c){const f=c;if(ps.get(f)||ps.set(f,f.style.overflow),f.style.overflow!=="hidden"&&(r=f.style.overflow),f.style.overflow==="hidden")return n.value=!0;if(n.value)return f.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=hs(ke(e));!l||n.value||(ni&&(s=Pt(l,"touchmove",c=>{ef(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=hs(ke(e));!l||!n.value||(ni&&(s==null||s()),l.style.overflow=r,ps.delete(l),n.value=!1)};return ir(o),ie({get(){return n.value},set(l){l?i():o()}})}function su(e,t,n={}){const{window:s=He}=n;return lr(e,t,s==null?void 0:s.sessionStorage,n)}function ru(e={}){const{window:t=He,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const s=oe(t.scrollX),r=oe(t.scrollY),i=ie({get(){return s.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return r.value},set(l){scrollTo({top:l,behavior:n})}});return Pt(t,"scroll",()=>{s.value=t.scrollX,r.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function iu(e={}){const{window:t=He,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=oe(n),c=oe(s),f=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(f(),or(f),Pt("resize",f,{passive:!0}),r){const a=$o("(orientation: portrait)");Be(a,()=>f())}return{width:l,height:c}}const gs={BASE_URL:"/ReefGuideAPI.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var ms={};const Uo=/^(?:[a-z]+:|\/\/)/i,tf="vitepress-theme-appearance",nf=/#.*$/,sf=/[?#].*$/,rf=/(?:(^|\/)index)?\.(?:md|html)$/,ge=typeof document<"u",Bo={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function of(e,t,n=!1){if(t===void 0)return!1;if(e=ri(`/${e}`),n)return new RegExp(t).test(e);if(ri(t)!==e)return!1;const s=t.match(nf);return s?(ge?location.hash:"")===s[0]:!0}function ri(e){return decodeURI(e).replace(sf,"").replace(rf,"$1")}function lf(e){return Uo.test(e)}function cf(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!lf(n)&&of(t,`/${n}/`,!0))||"root"}function af(e,t){var s,r,i,o,l,c,f;const n=cf(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Wo(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(f=e.locales[n])==null?void 0:f.themeConfig}})}function ko(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=ff(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function ff(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function uf(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function Wo(e,t){return[...e.filter(n=>!uf(t,n)),...t]}const df=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,hf=/^[a-z]:/i;function ii(e){const t=hf.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(df,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const ys=new Set;function pf(e){if(ys.size===0){const n=typeof process=="object"&&(ms==null?void 0:ms.VITE_EXTRA_EXTENSIONS)||(gs==null?void 0:gs.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>ys.add(s))}const t=e.split(".").pop();return t==null||!ys.has(t.toLowerCase())}function ou(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const gf=Symbol(),yt=zs(Fa);function lu(e){const t=ie(()=>af(yt.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?oe(!0):n?Za({storageKey:tf,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),r=oe(ge?location.hash:"");return ge&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Be(()=>e.data,()=>{r.value=ge?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>ko(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function mf(){const e=Mt(gf);if(!e)throw new Error("vitepress data not properly injected in app");return e}function yf(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function oi(e){return Uo.test(e)||!e.startsWith("/")?e:yf(yt.value.base,e)}function vf(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ge){const n="/ReefGuideAPI.jl/dev/";t=ii(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${ii(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let An=[];function cu(e){An.push(e),qn(()=>{An=An.filter(t=>t!==e)})}function bf(){let e=yt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=li(e,n);else if(Array.isArray(e))for(const s of e){const r=li(s,n);if(r){t=r;break}}return t}function li(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const _f=Symbol(),Ko="http://a.com",wf=()=>({path:"/",component:null,data:Bo});function au(e,t){const n=Bn(wf()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=vs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==vs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((f=s.onAfterRouteChanged)==null?void 0:f.call(s,l)))}let i=null;async function o(l,c=0,f=!1){var g;if(await((g=s.onBeforePageLoad)==null?void 0:g.call(s,l))===!1)return;const a=new URL(l,Ko),h=i=a.pathname;try{let v=await e(h);if(!v)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:_,__pageData:S}=v;if(!_)throw new Error(`Invalid route component: ${_}`);n.path=ge?h:oi(h),n.component=En(_),n.data=En(S),ge&&Wn(()=>{let U=yt.value.base+S.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!yt.value.cleanUrls&&!U.endsWith("/")&&(U+=".html"),U!==a.pathname&&(a.pathname=U,l=U+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let N=null;try{N=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(B){console.warn(B)}if(N){ci(N,a.hash);return}}window.scrollTo(0,c)})}}catch(v){if(!/fetch|Page not found/.test(v.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(v),!f)try{const _=await fetch(yt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await _.json(),await o(l,c,!0);return}catch{}if(i===h){i=null,n.path=ge?h:oi(h),n.component=t?En(t):null;const _=ge?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Bo,relativePath:_}}}}return ge&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const f=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(f==null)return;const{href:a,origin:h,pathname:g,hash:v,search:_}=new URL(f,c.baseURI),S=new URL(location.href);h===S.origin&&pf(g)&&(l.preventDefault(),g===S.pathname&&_===S.search?(v!==S.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:S.href,newURL:a}))),v?ci(c,v,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(vs(location.href),l.state&&l.state.scrollPosition||0),(c=s.onAfterRouteChanged)==null||c.call(s,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Sf(){const e=Mt(_f);if(!e)throw new Error("useRouter() is called without provider.");return e}function qo(){return Sf().route}function ci(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-bf()+i;requestAnimationFrame(r)}}function vs(e){const t=new URL(e,Ko);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),yt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const bs=()=>An.forEach(e=>e()),fu=Qs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=qo(),{site:n}=mf();return()=>Ns(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?Ns(t.component,{onVnodeMounted:bs,onVnodeUpdated:bs,onVnodeUnmounted:bs}):"404 Page Not Found"])}}),Ef="modulepreload",xf=function(e){return"/ReefGuideAPI.jl/dev/"+e},ai={},uu=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=xf(c),c in ai)return;ai[c]=!0;const f=c.endsWith(".css"),a=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":Ef,f||(h.as="script"),h.crossOrigin="",h.href=c,l&&h.setAttribute("nonce",l),document.head.appendChild(h),f)return new Promise((g,v)=>{h.addEventListener("load",g),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},du=Qs({setup(e,{slots:t}){const n=oe(!1);return It(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function hu(){ge&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(f=>f.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function pu(){if(ge){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let f=c.textContent||"";o&&(f=f.replace(/^ *(\$|>) /gm,"").trim()),Tf(f).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Tf(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function gu(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=_s(l);for(const f of document.head.children)if(f.isEqualNode(c)){s.push(f);return}});return}const o=i.map(_s);s.forEach((l,c)=>{const f=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));f!==-1?delete o[f]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};sr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],f=ko(o,i);f!==document.title&&(document.title=f);const a=l||o.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==a&&h.setAttribute("content",a):_s(["meta",{name:"description",content:a}]),r(Wo(o.head,Af(c)))})}function _s([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&!t.async&&(s.async=!1),s}function Cf(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Af(e){return e.filter(t=>!Cf(t))}const ws=new Set,Go=()=>document.createElement("link"),Rf=e=>{const t=Go();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Of=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let _n;const Mf=ge&&(_n=Go())&&_n.relList&&_n.relList.supports&&_n.relList.supports("prefetch")?Rf:Of;function mu(){if(!ge||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!ws.has(c)){ws.add(c);const f=vf(c);f&&Mf(f)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):ws.add(l))})})};It(s);const r=qo();Be(()=>r.path,s),qn(()=>{n&&n.disconnect()})}export{zi as $,bf as A,Nf as B,Hf as C,zs as D,cu as E,Se as F,le as G,Ff as H,Uo as I,qo as J,Yc as K,Mt as L,iu as M,Vs as N,eu as O,Wn as P,ru as Q,ge as R,kn as S,Wf as T,Lf as U,uu as V,nu as W,Cc as X,Gf as Y,Df as Z,zf as _,Eo as a,qf as a0,jf as a1,Bn as a2,Vl as a3,Ns as a4,Bf as a5,gu as a6,_f as a7,lu as a8,gf as a9,fu as aa,du as ab,yt as ac,Xf as ad,au as ae,vf as af,mu as ag,pu as ah,hu as ai,ke as aj,Ho as ak,Jf as al,ir as am,Zf as an,su as ao,tu as ap,Qf as aq,Sf as ar,Pt as as,Pf as at,Kf as au,ae as av,If as aw,En as ax,Yf as ay,ou as az,Is as b,Uf as c,Qs as d,kf as e,pf as f,oi as g,ie as h,lf as i,So as j,Fi as k,of as l,$o as m,Us as n,Ps as o,oe as p,Be as q,$f as r,sr as s,cl as t,mf as u,It as v,Xl as w,qn as x,Vf as y,dc as z}; diff --git a/dev/assets/chunks/theme._B5YJXUN.js b/dev/assets/chunks/theme.Db56iT4S.js similarity index 99% rename from dev/assets/chunks/theme._B5YJXUN.js rename to dev/assets/chunks/theme.Db56iT4S.js index 4a44459..07b0bd9 100644 --- a/dev/assets/chunks/theme._B5YJXUN.js +++ b/dev/assets/chunks/theme.Db56iT4S.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.BO9Crzas.js","assets/chunks/framework.BvdfcH24.js"])))=>i.map(i=>d[i]); -import{d as m,o as a,c as u,r as c,n as I,a as O,t as w,b as g,w as f,e as h,T as de,_ as $,u as je,i as Ge,f as ze,g as ve,h as y,j as p,k as r,l as K,m as re,p as T,q as F,s as Z,v as z,x as pe,y as fe,z as Ke,A as Re,B as R,F as M,C as B,D as Ve,E as x,G as k,H as E,I as Le,J as ee,K as G,L as q,M as We,N as Te,O as ie,P as Ne,Q as we,R as te,S as qe,U as Je,V as Ye,W as Ie,X as he,Y as Xe,Z as Qe,$ as Ze,a0 as xe,a1 as Me,a2 as et,a3 as tt,a4 as nt}from"./framework.BvdfcH24.js";const st=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),u("span",{class:I(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[O(w(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},at=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),g(de,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",ot)):h("",!0)]),_:1}))}}),rt=$(at,[["__scopeId","data-v-b06cdb19"]]),L=je;function it(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function me(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return ve(l)}function Y({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=L(),l=y(()=>{var d,_;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:((_=e.value.locales[t.value])==null?void 0:_.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([d,_])=>l.value.label===_.label?[]:{text:_.label,link:lt(_.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function lt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ct={class:"NotFound"},ut={class:"code"},dt={class:"title"},vt={class:"quote"},pt={class:"action"},ft=["href","aria-label"],ht=m({__name:"NotFound",setup(o){const{theme:e}=L(),{currentLang:t}=Y();return(s,n)=>{var i,l,v,d,_;return a(),u("div",ct,[p("p",ut,w(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",dt,w(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=p("div",{class:"divider"},null,-1)),p("blockquote",vt,w(((v=r(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",pt,[p("a",{class:"link",href:r(ve)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},w(((_=r(e).notFound)==null?void 0:_.linkText)??"Take me home"),9,ft)])])}}}),mt=$(ht,[["__scopeId","data-v-951cab6c"]]);function Ae(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?X(s):X(s.items,s.base)}function _t(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function bt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):K(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=X(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=L(),s=re("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Ae(C,N):[]}),l=T(i.value);F(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const v=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),d=y(()=>_?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),_=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),V=y(()=>v.value&&s.value),b=y(()=>v.value?_t(l.value):[]);function P(){n.value=!0}function S(){n.value=!1}function A(){n.value?S():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:_,leftAside:d,isSidebarEnabled:V,open:P,close:S,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function gt(o){const{page:e,hash:t}=L(),s=T(!1),n=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),l=T(!1),v=()=>{l.value=K(e.value.relativePath,o.value.link)};F([e,o,t],v),z(v);const d=y(()=>l.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),_=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||d.value)&&(s.value=!1)});function V(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:d,hasChildren:_,toggle:V}}function $t(){const{hasSidebar:o}=U(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ce(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:yt(t),link:"#"+t.id,level:s}});return Pt(e,o)}function yt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=s&&l.level<=n),ue.length=0;for(const{element:l,link:v}of o)ue.push({element:l,link:v});const i=[];e:for(let l=0;l=0;d--){const _=o[d];if(_.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{l(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const v=window.scrollY,d=window.innerHeight,_=document.body.offsetHeight,V=Math.abs(v+d-_)<1,b=ue.map(({element:S,link:A})=>({link:A,top:Vt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:S,top:A}of b){if(A>v+Re()+4)break;P=S}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Lt=["href","title"],Tt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=R("VPDocOutlineItem",!0);return a(),u("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,B(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:v},w(v),9,Lt),i!=null&&i.length?(a(),g(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Be=$(Tt,[["__scopeId","data-v-3f927ebe"]]),Nt={class:"content"},wt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},It=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=L(),s=Ve([]);x(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=T(),i=T();return St(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",Nt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",wt,w(r(Ce)(r(t))),1),k(Be,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Mt=$(It,[["__scopeId","data-v-b38bf2ff"]]),At={class:"VPDocAsideCarbonAds"},Ct=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),u("div",At,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Bt={class:"VPDocAside"},Ht=m({__name:"VPDocAside",setup(o){const{theme:e}=L();return(t,s)=>(a(),u("div",Bt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(Mt),c(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=p("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),g(Ct,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=$(Ht,[["__scopeId","data-v-6d7b3c46"]]);function Dt(){const{theme:o,page:e}=L();return y(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Ft(){const{page:o,theme:e,frontmatter:t}=L();return y(()=>{var _,V,b,P,S,A,C,N;const s=Ae(e.value.sidebar,o.value.relativePath),n=bt(s),i=Ot(n,H=>H.link.replace(/[?#].*$/,"")),l=i.findIndex(H=>K(o.value.relativePath,H.link)),v=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[l-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ot(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),s=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),g(E(t.value),{class:I(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(me)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ut={class:"VPLastUpdated"},jt=["datetime"],Gt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return z(()=>{Z(()=>{var v,d,_;l.value=new Intl.DateTimeFormat((d=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&d.forceLocale?s.value:void 0,((_=e.value.lastUpdated)==null?void 0:_.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,d)=>{var _;return a(),u("p",Ut,[O(w(((_=r(e).lastUpdated)==null?void 0:_.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},w(l.value),9,jt)])}}}),zt=$(Gt,[["__scopeId","data-v-475f71b8"]]),Kt={key:0,class:"VPDocFooter"},Rt={key:0,class:"edit-info"},Wt={key:0,class:"edit-link"},qt={key:1,class:"last-updated"},Jt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Yt={class:"pager"},Xt=["innerHTML"],Qt=["innerHTML"],Zt={class:"pager"},xt=["innerHTML"],en=["innerHTML"],tn=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=L(),n=Dt(),i=Ft(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),v=y(()=>t.value.lastUpdated),d=y(()=>l.value||v.value||i.value.prev||i.value.next);return(_,V)=>{var b,P,S,A;return d.value?(a(),u("footer",Kt,[c(_.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Rt,[l.value?(a(),u("div",Wt,[k(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[V[0]||(V[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),O(" "+w(r(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),u("div",qt,[k(zt)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Jt,[V[1]||(V[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Yt,[(S=r(i).prev)!=null&&S.link?(a(),g(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,Xt),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,Qt)]}),_:1},8,["href"])):h("",!0)]),p("div",Zt,[(A=r(i).next)!=null&&A.link?(a(),g(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,xt),p("span",{class:"title",innerHTML:r(i).next.text},null,8,en)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),nn=$(tn,[["__scopeId","data-v-4f9813fa"]]),sn={class:"container"},on={class:"aside-container"},an={class:"aside-content"},rn={class:"content"},ln={class:"content-container"},cn={class:"main"},un=m({__name:"VPDoc",setup(o){const{theme:e}=L(),t=ee(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,d)=>{const _=R("Content");return a(),u("div",{class:I(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),p("div",sn,[r(n)?(a(),u("div",{key:0,class:I(["aside",{"left-aside":r(i)}])},[d[0]||(d[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",on,[p("div",an,[k(Et,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",rn,[p("div",ln,[c(v.$slots,"doc-before",{},void 0,!0),p("main",cn,[k(_,{class:I(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(nn,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),dn=$(un,[["__scopeId","data-v-83890dd9"]]),vn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),s=y(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),g(E(s.value),{class:I(["VPButton",[n.size,n.theme]]),href:n.href?r(me)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[O(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),pn=$(vn,[["__scopeId","data-v-14206e74"]]),fn=["src","alt"],hn=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=R("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,fn)):(a(),u(M,{key:1},[k(s,G({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,G({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Q=$(hn,[["__scopeId","data-v-35a7d0b8"]]),mn={class:"container"},_n={class:"main"},bn={key:0,class:"name"},kn=["innerHTML"],gn=["innerHTML"],$n=["innerHTML"],yn={key:0,class:"actions"},Pn={key:0,class:"image"},Sn={class:"image-container"},Vn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=q("hero-image-slot-exists");return(t,s)=>(a(),u("div",{class:I(["VPHero",{"has-image":t.image||r(e)}])},[p("div",mn,[p("div",_n,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",bn,[p("span",{innerHTML:t.name,class:"clip"},null,8,kn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,gn)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,$n)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",yn,[(a(!0),u(M,null,B(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[k(pn,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",Pn,[p("div",Sn,[s[0]||(s[0]=p("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),g(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Ln=$(Vn,[["__scopeId","data-v-955009fc"]]),Tn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).hero?(a(),g(Ln,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Nn={class:"box"},wn={key:0,class:"icon"},In=["innerHTML"],Mn=["innerHTML"],An=["innerHTML"],Cn={key:4,class:"link-text"},Bn={class:"link-text-value"},Hn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),g(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",Nn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",wn,[k(Q,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),g(Q,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,In)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Mn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,An)):h("",!0),e.linkText?(a(),u("div",Cn,[p("p",Bn,[O(w(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),En=$(Hn,[["__scopeId","data-v-f5e9645b"]]),Dn={key:0,class:"VPFeatures"},Fn={class:"container"},On={class:"items"},Un=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),u("div",Dn,[p("div",Fn,[p("div",On,[(a(!0),u(M,null,B(s.features,i=>(a(),u("div",{key:i.title,class:I(["item",[t.value]])},[k(En,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),jn=$(Un,[["__scopeId","data-v-d0a190d7"]]),Gn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).features?(a(),g(jn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),zn=m({__name:"VPHomeContent",setup(o){const{width:e}=We({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),u("div",{class:"vp-doc container",style:Te(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Kn=$(zn,[["__scopeId","data-v-7a48a447"]]),Rn={class:"VPHome"},Wn=m({__name:"VPHome",setup(o){const{frontmatter:e}=L();return(t,s)=>{const n=R("Content");return a(),u("div",Rn,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Tn,null,{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),k(Gn),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),g(Kn,{key:0},{default:f(()=>[k(n)]),_:1})):(a(),g(n,{key:1}))])}}}),qn=$(Wn,[["__scopeId","data-v-cbb6ec48"]]),Jn={},Yn={class:"VPPage"};function Xn(o,e){const t=R("Content");return a(),u("div",Yn,[c(o.$slots,"page-top"),k(t),c(o.$slots,"page-bottom")])}const Qn=$(Jn,[["render",Xn]]),Zn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>(a(),u("div",{class:I(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[k(mt)],!0):r(t).layout==="page"?(a(),g(Qn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),g(qn,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),g(E(r(t).layout),{key:3})):(a(),g(dn,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),xn=$(Zn,[["__scopeId","data-v-91765379"]]),es={class:"container"},ts=["innerHTML"],ns=["innerHTML"],ss=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:I(["VPFooter",{"has-sidebar":r(s)}])},[p("div",es,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,ts)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ns)):h("",!0)])],2)):h("",!0)}}),os=$(ss,[["__scopeId","data-v-c970a860"]]);function as(){const{theme:o,frontmatter:e}=L(),t=Ve([]),s=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const rs={class:"menu-text"},is={class:"header"},ls={class:"outline"},cs=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=L(),s=T(!1),n=T(0),i=T(),l=T();function v(b){var P;(P=i.value)!=null&&P.contains(b.target)||(s.value=!1)}F(s,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ie("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function _(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{s.value=!1}))}function V(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:d,class:I({open:s.value})},[p("span",rs,w(r(Ce)(r(t))),1),P[0]||(P[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)),k(de,{name:"flyout"},{default:f(()=>[s.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:_},[p("div",is,[p("a",{class:"top-link",href:"#",onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)]),p("div",ls,[k(Be,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),us=$(cs,[["__scopeId","data-v-bc9dc845"]]),ds={class:"container"},vs=["aria-expanded"],ps={class:"menu-text"},fs=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U(),{headers:n}=as(),{y:i}=we(),l=T(0);z(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=_e(t.value.outline??e.value.outline)});const v=y(()=>n.value.length===0),d=y(()=>v.value&&!s.value),_=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:v.value,fixed:d.value}));return(V,b)=>r(t).layout!=="home"&&(!d.value||r(i)>=l.value)?(a(),u("div",{key:0,class:I(_.value)},[p("div",ds,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",ps,w(r(e).sidebarMenuLabel||"Menu"),1)],8,vs)):h("",!0),k(us,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),hs=$(fs,[["__scopeId","data-v-070ab83d"]]);function ms(){const o=T(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=ee();return F(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const _s={},bs={class:"VPSwitch",type:"button",role:"switch"},ks={class:"check"},gs={key:0,class:"icon"};function $s(o,e){return a(),u("button",bs,[p("span",ks,[o.$slots.default?(a(),u("span",gs,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ys=$(_s,[["render",$s],["__scopeId","data-v-4a1c76db"]]),Ps=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=L(),s=q("toggle-appearance",()=>{e.value=!e.value}),n=T("");return fe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),g(ys,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:f(()=>l[0]||(l[0]=[p("span",{class:"vpi-sun sun"},null,-1),p("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),be=$(Ps,[["__scopeId","data-v-e40a8bb6"]]),Ss={key:0,class:"VPNavBarAppearance"},Vs=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=L();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ss,[k(be)])):h("",!0)}}),Ls=$(Vs,[["__scopeId","data-v-af096f4a"]]),ke=T();let He=!1,ae=0;function Ts(o){const e=T(!1);if(te){!He&&Ns(),ae++;const t=F(ke,s=>{var n,i,l;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});pe(()=>{t(),ae--,ae||ws()})}return qe(e)}function Ns(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function ws(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Is={class:"VPMenuLink"},Ms=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),u("div",Is,[k(D,{class:I({active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=$(Ms,[["__scopeId","data-v-8b74d055"]]),As={class:"VPMenuGroup"},Cs={key:0,class:"title"},Bs=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",As,[e.text?(a(),u("p",Cs,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),u(M,null,["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),Hs=$(Bs,[["__scopeId","data-v-48c802d0"]]),Es={class:"VPMenu"},Ds={key:0,class:"items"},Fs=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",Es,[e.items?(a(),u("div",Ds,[(a(!0),u(M,null,B(e.items,s=>(a(),u(M,{key:JSON.stringify(s)},["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(E(s.component),G({key:1,ref_for:!0},s.props),null,16)):(a(),g(Hs,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Os=$(Fs,[["__scopeId","data-v-7dd3104a"]]),Us=["aria-expanded","aria-label"],js={key:0,class:"text"},Gs=["innerHTML"],zs={key:1,class:"vpi-more-horizontal icon"},Ks={class:"menu"},Rs=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=T(!1),t=T();Ts({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",js,[n.icon?(a(),u("span",{key:0,class:I([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Gs)):h("",!0),i[3]||(i[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",zs))],8,Us),p("div",Ks,[k(Os,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(Rs,[["__scopeId","data-v-e5380155"]]),Ws=["href","aria-label","innerHTML"],qs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),u("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ws))}}),Js=$(qs,[["__scopeId","data-v-717b8b75"]]),Ys={class:"VPSocialLinks"},Xs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",Ys,[(a(!0),u(M,null,B(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),g(Js,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=$(Xs,[["__scopeId","data-v-ee7a9424"]]),Qs={key:0,class:"group translations"},Zs={class:"trans-title"},xs={key:1,class:"group"},eo={class:"item appearance"},to={class:"label"},no={class:"appearance-action"},so={key:2,class:"group"},oo={class:"item social-links"},ao=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=L(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),i=y(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),g(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(n).label?(a(),u("div",Qs,[p("p",Zs,w(r(n).label),1),(a(!0),u(M,null,B(r(s),d=>(a(),g(ne,{key:d.link,item:d},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",xs,[p("div",eo,[p("p",to,w(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",no,[k(be)])])])):h("",!0),r(t).socialLinks?(a(),u("div",so,[p("div",oo,[k($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),ro=$(ao,[["__scopeId","data-v-925effce"]]),io=["aria-expanded"],lo=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),u("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},t[1]||(t[1]=[p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)]),10,io))}}),co=$(lo,[["__scopeId","data-v-5dea55bf"]]),uo=["innerHTML"],vo=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),g(D,{class:I({VPNavBarMenuLink:!0,active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,uo)]),_:1},8,["class","href","noIcon","target","rel"]))}}),po=$(vo,[["__scopeId","data-v-ed5ac1f6"]]),fo=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=L(),s=i=>"component"in i?!1:"link"in i?K(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=y(()=>s(e.item));return(i,l)=>(a(),g(ge,{class:I({VPNavBarMenuGroup:!0,active:r(K)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ho={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},mo=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ho,[s[0]||(s[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(po,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props),null,16)):(a(),g(fo,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),_o=$(mo,[["__scopeId","data-v-e6d46098"]]);function bo(o){const{localeIndex:e,theme:t}=L();function s(n){var A,C,N;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,v=l&&typeof l=="object",d=v&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,_=v&&l.translations||null;let V=d,b=_,P=o;const S=i.pop();for(const H of i){let j=null;const W=P==null?void 0:P[H];W&&(j=P=W);const se=b==null?void 0:b[H];se&&(j=b=se);const oe=V==null?void 0:V[H];oe&&(j=V=oe),W||(P=j),se||(b=j),oe||(V=j)}return(V==null?void 0:V[S])??(b==null?void 0:b[S])??(P==null?void 0:P[S])??""}return s}const ko=["aria-label"],go={class:"DocSearch-Button-Container"},$o={class:"DocSearch-Button-Placeholder"},ye=m({__name:"VPNavBarSearchButton",setup(o){const t=bo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",go,[n[0]||(n[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",$o,w(r(t)("button.buttonText")),1)]),n[1]||(n[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,ko))}}),yo={class:"VPNavBarSearch"},Po={id:"local-search"},So={key:1,id:"docsearch"},Vo=m({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.BO9Crzas.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=L(),n=T(!1),i=T(!1);z(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function d(b){const P=b.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const _=T(!1);ie("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),_.value=!0)}),ie("/",b=>{d(b)||(b.preventDefault(),_.value=!0)});const V="local";return(b,P)=>{var S;return a(),u("div",yo,[r(V)==="local"?(a(),u(M,{key:0},[_.value?(a(),g(r(e),{key:0,onClose:P[0]||(P[0]=A=>_.value=!1)})):h("",!0),p("div",Po,[k(ye,{onClick:P[1]||(P[1]=A=>_.value=!0)})])],64)):r(V)==="algolia"?(a(),u(M,{key:1},[n.value?(a(),g(r(t),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",So,[k(ye,{onClick:l})]))],64)):h("",!0)])}}}),Lo=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),To=$(Lo,[["__scopeId","data-v-164c457f"]]),No=["href","rel","target"],wo={key:1},Io={key:2},Mo=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=L(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=y(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),l=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),v=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,_)=>(a(),u("div",{class:I(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(me)(r(n).link),rel:l.value,target:v.value},[c(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),g(Q,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",wo,w(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",Io,w(r(e).title),1)):h("",!0),c(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,No)],2))}}),Ao=$(Mo,[["__scopeId","data-v-28a961f9"]]),Co={class:"items"},Bo={class:"title"},Ho=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=L(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),g(ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",Co,[p("p",Bo,w(r(s).label),1),(a(!0),u(M,null,B(r(t),l=>(a(),g(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Eo=$(Ho,[["__scopeId","data-v-c80d9ad0"]]),Do={class:"wrapper"},Fo={class:"container"},Oo={class:"title"},Uo={class:"content"},jo={class:"content-body"},Go=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=we(),{hasSidebar:s}=U(),{frontmatter:n}=L(),i=T({});return fe(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:I(["VPNavBar",i.value])},[p("div",Do,[p("div",Fo,[p("div",Oo,[k(Ao,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",Uo,[p("div",jo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(Vo,{class:"search"}),k(_o,{class:"menu"}),k(Eo,{class:"translations"}),k(Ls,{class:"appearance"}),k(To,{class:"social-links"}),k(ro,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(co,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=d=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),zo=$(Go,[["__scopeId","data-v-822684d1"]]),Ko={key:0,class:"VPNavScreenAppearance"},Ro={class:"text"},Wo=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=L();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ko,[p("p",Ro,w(r(t).darkModeSwitchLabel||"Appearance"),1),k(be)])):h("",!0)}}),qo=$(Wo,[["__scopeId","data-v-ffb44008"]]),Jo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Yo=$(Jo,[["__scopeId","data-v-27d04aeb"]]),Xo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),De=$(Xo,[["__scopeId","data-v-7179dbb7"]]),Qo={class:"VPNavScreenMenuGroupSection"},Zo={key:0,class:"title"},xo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",Qo,[e.text?(a(),u("p",Zo,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),g(De,{key:s.text,item:s},null,8,["item"]))),128))]))}}),ea=$(xo,[["__scopeId","data-v-4b8941ac"]]),ta=["aria-controls","aria-expanded"],na=["innerHTML"],sa=["id"],oa={key:0,class:"item"},aa={key:1,class:"item"},ra={key:2,class:"group"},ia=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=T(!1),s=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,na),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,ta),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,B(i.items,v=>(a(),u(M,{key:JSON.stringify(v)},["link"in v?(a(),u("div",oa,[k(De,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",aa,[(a(),g(E(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ra,[k(ea,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,sa)],2))}}),la=$(ia,[["__scopeId","data-v-875057a5"]]),ca={key:0,class:"VPNavScreenMenu"},ua=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ca,[(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(Yo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),g(la,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),da=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),va={class:"list"},pa=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=T(!1);function n(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),O(" "+w(r(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",va,[(a(!0),u(M,null,B(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[k(D,{class:"link",href:v.link},{default:f(()=>[O(w(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),fa=$(pa,[["__scopeId","data-v-362991c2"]]),ha={class:"container"},ma=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=T(null),t=Ie(te?document.body:null);return(s,n)=>(a(),g(de,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[s.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",ha,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(ua,{class:"menu"}),k(fa,{class:"translations"}),k(qo,{class:"appearance"}),k(da,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),_a=$(ma,[["__scopeId","data-v-833aabba"]]),ba={key:0,class:"VPNav"},ka=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=ms(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return he("close-screen",t),Z(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",ba,[k(zo,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(_a,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ga=$(ka,[["__scopeId","data-v-f1e365da"]]),$a=["role","tabindex"],ya={key:1,class:"items"},Pa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:d}=gt(y(()=>e.item)),_=y(()=>v.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),S=y(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(N){"key"in N&&N.key!=="Enter"||!e.item.link&&d()}function C(){e.item.link&&d()}return(N,H)=>{const j=R("VPSidebarItem",!0);return a(),g(E(_.value),{class:I(["VPSidebarItem",S.value])},{default:f(()=>[N.item.text?(a(),u("div",G({key:0,class:"item",role:P.value},Qe(N.item.items?{click:A,keydown:A}:{},!0),{tabindex:N.item.items&&0}),[H[1]||(H[1]=p("div",{class:"indicator"},null,-1)),N.item.link?(a(),g(D,{key:0,tag:V.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),g(E(b.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(E(b.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Xe(C,["enter"]),tabindex:"0"},H[0]||(H[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,$a)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",ya,[N.depth<5?(a(!0),u(M,{key:0},B(N.item.items,W=>(a(),g(j,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Sa=$(Pa,[["__scopeId","data-v-196b2e5f"]]),Va=m({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=T(!0);let t=null;return z(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ze(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),u(M,null,B(s.items,i=>(a(),u("div",{key:i.text,class:I(["group",{"no-transition":e.value}])},[k(Sa,{item:i,depth:0},null,8,["item"])],2))),128))}}),La=$(Va,[["__scopeId","data-v-9e426adc"]]),Ta={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Na=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=T(null),i=Ie(te?document.body:null);F([s,n],()=>{var v;s.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return F(e,()=>{l.value+=1},{deep:!0}),(v,d)=>r(t)?(a(),u("aside",{key:0,class:I(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=xe(()=>{},["stop"]))},[d[2]||(d[2]=p("div",{class:"curtain"},null,-1)),p("nav",Ta,[d[1]||(d[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(La,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),wa=$(Na,[["__scopeId","data-v-18756405"]]),Ia=m({__name:"VPSkipLink",setup(o){const e=ee(),t=T();F(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),u(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),Ma=$(Ia,[["__scopeId","data-v-c3508ec8"]]),Aa=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=ee();F(()=>n.path,s),kt(e,s);const{frontmatter:i}=L(),l=Me(),v=y(()=>!!l["home-hero-image"]);return he("hero-image-slot-exists",v),(d,_)=>{const V=R("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:I(["Layout",r(i).pageClass])},[c(d.$slots,"layout-top",{},void 0,!0),k(Ma),k(rt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k(ga,null,{"nav-bar-title-before":f(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(hs,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k(wa,{open:r(e)},{"sidebar-nav-before":f(()=>[c(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(xn,null,{"page-top":f(()=>[c(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(os),c(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(V,{key:1}))}}}),Ca=$(Aa,[["__scopeId","data-v-a9a9e638"]]),Pe={Layout:Ca,enhanceApp:({app:o})=>{o.component("Badge",st)}},Ba=o=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...i)=>n(...i)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...n)=>{const i=s(...n),l=o.value;if(!l)return i;const v=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-v,i}}},Fe="vitepress:tabSharedState",J=typeof localStorage<"u"?localStorage:null,Oe="vitepress:tabsSharedState",Ha=()=>{const o=J==null?void 0:J.getItem(Oe);if(o)try{return JSON.parse(o)}catch{}return{}},Ea=o=>{J&&J.setItem(Oe,JSON.stringify(o))},Da=o=>{const e=et({});F(()=>e.content,(t,s)=>{t&&s&&Ea(t)},{deep:!0}),o.provide(Fe,e)},Fa=(o,e)=>{const t=q(Fe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=Ha())});const s=T(),n=y({get(){var d;const l=e.value,v=o.value;if(l){const _=(d=t.content)==null?void 0:d[l];if(_&&v.includes(_))return _}else{const _=s.value;if(_)return _}return v[0]},set(l){const v=e.value;v?t.content&&(t.content[v]=l):s.value=l}});return{selected:n,select:l=>{n.value=l}}};let Se=0;const Oa=()=>(Se++,""+Se);function Ua(){const o=Me();return y(()=>{var s;const t=(s=o.default)==null?void 0:s.call(o);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var i;return(i=n.props)==null?void 0:i.label}):[]})}const Ue="vitepress:tabSingleState",ja=o=>{he(Ue,o)},Ga=()=>{const o=q(Ue);if(!o)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return o},za={class:"plugin-tabs"},Ka=["id","aria-selected","aria-controls","tabindex","onClick"],Ra=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(o){const e=o,t=Ua(),{selected:s,select:n}=Fa(t,tt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Ba(i),v=l(n),d=T([]),_=b=>{var A;const P=t.value.indexOf(s.value);let S;b.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:b.key==="ArrowRight"&&(S=P(a(),u("div",za,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(a(!0),u(M,null,B(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(V)}`,ref_for:!0,ref_key:"buttonRefs",ref:d,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===r(s),"aria-controls":`panel-${S}-${r(V)}`,tabindex:S===r(s)?0:-1,onClick:()=>r(v)(S)},w(S),9,Ka))),128))],544),c(b.$slots,"default")]))}}),Wa=["id","aria-labelledby"],qa=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=Ga();return(s,n)=>r(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${r(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Wa)):h("",!0)}}),Ja=$(qa,[["__scopeId","data-v-9b0d03d2"]]),Ya=o=>{Da(o),o.component("PluginTabs",Ra),o.component("PluginTabsTab",Ja)},Qa={extends:Pe,Layout(){return nt(Pe.Layout,null,{})},enhanceApp({app:o,router:e,siteData:t}){Ya(o)}};export{Qa as R,bo as c,L as u}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.lx_FSht0.js","assets/chunks/framework.DT0TDSCa.js"])))=>i.map(i=>d[i]); +import{d as m,o as a,c as u,r as c,n as I,a as O,t as w,b as g,w as f,e as h,T as de,_ as $,u as je,i as Ge,f as ze,g as ve,h as y,j as p,k as r,l as K,m as re,p as T,q as F,s as Z,v as z,x as pe,y as fe,z as Ke,A as Re,B as R,F as M,C as B,D as Ve,E as x,G as k,H as E,I as Le,J as ee,K as G,L as q,M as We,N as Te,O as ie,P as Ne,Q as we,R as te,S as qe,U as Je,V as Ye,W as Ie,X as he,Y as Xe,Z as Qe,$ as Ze,a0 as xe,a1 as Me,a2 as et,a3 as tt,a4 as nt}from"./framework.DT0TDSCa.js";const st=m({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),u("span",{class:I(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[O(w(e.text),1)])],2))}}),ot={key:0,class:"VPBackdrop"},at=m({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),g(de,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",ot)):h("",!0)]),_:1}))}}),rt=$(at,[["__scopeId","data-v-b06cdb19"]]),L=je;function it(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function le(o){return/^\//.test(o)?o:`/${o}`}function me(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:i}=L(),l=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return ve(l)}function Y({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=L(),l=y(()=>{var d,_;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:((_=e.value.locales[t.value])==null?void 0:_.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([d,_])=>l.value.label===_.label?[]:{text:_.label,link:lt(_.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function lt(o,e,t,s){return e?o.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ct={class:"NotFound"},ut={class:"code"},dt={class:"title"},vt={class:"quote"},pt={class:"action"},ft=["href","aria-label"],ht=m({__name:"NotFound",setup(o){const{theme:e}=L(),{currentLang:t}=Y();return(s,n)=>{var i,l,v,d,_;return a(),u("div",ct,[p("p",ut,w(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",dt,w(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),n[0]||(n[0]=p("div",{class:"divider"},null,-1)),p("blockquote",vt,w(((v=r(e).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",pt,[p("a",{class:"link",href:r(ve)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},w(((_=r(e).notFound)==null?void 0:_.linkText)??"Take me home"),9,ft)])])}}}),mt=$(ht,[["__scopeId","data-v-951cab6c"]]);function Ae(o,e){if(Array.isArray(o))return X(o);if(o==null)return[];e=le(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(le(n))),s=t?o[t]:[];return Array.isArray(s)?X(s):X(s.items,s.base)}function _t(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function bt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ce(o,e){return Array.isArray(e)?e.some(t=>ce(o,t)):K(o,e.link)?!0:e.items?ce(o,e.items):!1}function X(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=X(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=L(),s=re("(min-width: 960px)"),n=T(!1),i=y(()=>{const C=t.value.sidebar,N=e.value.relativePath;return C?Ae(C,N):[]}),l=T(i.value);F(i,(C,N)=>{JSON.stringify(C)!==JSON.stringify(N)&&(l.value=i.value)});const v=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),d=y(()=>_?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),_=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),V=y(()=>v.value&&s.value),b=y(()=>v.value?_t(l.value):[]);function P(){n.value=!0}function S(){n.value=!1}function A(){n.value?S():P()}return{isOpen:n,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:_,leftAside:d,isSidebarEnabled:V,open:P,close:S,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),z(()=>{window.addEventListener("keyup",s)}),pe(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function gt(o){const{page:e,hash:t}=L(),s=T(!1),n=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),l=T(!1),v=()=>{l.value=K(e.value.relativePath,o.value.link)};F([e,o,t],v),z(v);const d=y(()=>l.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),_=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||d.value)&&(s.value=!1)});function V(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:d,hasChildren:_,toggle:V}}function $t(){const{hasSidebar:o}=U(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const ue=[];function Ce(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:yt(t),link:"#"+t.id,level:s}});return Pt(e,o)}function yt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Pt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(l=>l.level>=s&&l.level<=n),ue.length=0;for(const{element:l,link:v}of o)ue.push({element:l,link:v});const i=[];e:for(let l=0;l=0;d--){const _=o[d];if(_.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{l(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const v=window.scrollY,d=window.innerHeight,_=document.body.offsetHeight,V=Math.abs(v+d-_)<1,b=ue.map(({element:S,link:A})=>({link:A,top:Vt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:S,top:A}of b){if(A>v+Re()+4)break;P=S}l(P)}function l(v){n&&n.classList.remove("active"),v==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Vt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Lt=["href","title"],Tt=m({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=R("VPDocOutlineItem",!0);return a(),u("ul",{class:I(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,B(t.headers,({children:i,link:l,title:v})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:v},w(v),9,Lt),i!=null&&i.length?(a(),g(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Be=$(Tt,[["__scopeId","data-v-3f927ebe"]]),Nt={class:"content"},wt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},It=m({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=L(),s=Ve([]);x(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=T(),i=T();return St(n,i),(l,v)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:I(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",Nt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",wt,w(r(Ce)(r(t))),1),k(Be,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Mt=$(It,[["__scopeId","data-v-b38bf2ff"]]),At={class:"VPDocAsideCarbonAds"},Ct=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),u("div",At,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Bt={class:"VPDocAside"},Ht=m({__name:"VPDocAside",setup(o){const{theme:e}=L();return(t,s)=>(a(),u("div",Bt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(Mt),c(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=p("div",{class:"spacer"},null,-1)),c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),g(Ct,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Et=$(Ht,[["__scopeId","data-v-6d7b3c46"]]);function Dt(){const{theme:o,page:e}=L();return y(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Ft(){const{page:o,theme:e,frontmatter:t}=L();return y(()=>{var _,V,b,P,S,A,C,N;const s=Ae(e.value.sidebar,o.value.relativePath),n=bt(s),i=Ot(n,H=>H.link.replace(/[?#].*$/,"")),l=i.findIndex(H=>K(o.value.relativePath,H.link)),v=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:v?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[l-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((N=i[l+1])==null?void 0:N.link)}}})}function Ot(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=m({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),s=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),g(E(t.value),{class:I(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(me)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[c(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Ut={class:"VPLastUpdated"},jt=["datetime"],Gt=m({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=L(),n=y(()=>new Date(t.value.lastUpdated)),i=y(()=>n.value.toISOString()),l=T("");return z(()=>{Z(()=>{var v,d,_;l.value=new Intl.DateTimeFormat((d=(v=e.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&d.forceLocale?s.value:void 0,((_=e.value.lastUpdated)==null?void 0:_.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(v,d)=>{var _;return a(),u("p",Ut,[O(w(((_=r(e).lastUpdated)==null?void 0:_.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},w(l.value),9,jt)])}}}),zt=$(Gt,[["__scopeId","data-v-475f71b8"]]),Kt={key:0,class:"VPDocFooter"},Rt={key:0,class:"edit-info"},Wt={key:0,class:"edit-link"},qt={key:1,class:"last-updated"},Jt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Yt={class:"pager"},Xt=["innerHTML"],Qt=["innerHTML"],Zt={class:"pager"},xt=["innerHTML"],en=["innerHTML"],tn=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=L(),n=Dt(),i=Ft(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),v=y(()=>t.value.lastUpdated),d=y(()=>l.value||v.value||i.value.prev||i.value.next);return(_,V)=>{var b,P,S,A;return d.value?(a(),u("footer",Kt,[c(_.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(a(),u("div",Rt,[l.value?(a(),u("div",Wt,[k(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:f(()=>[V[0]||(V[0]=p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),O(" "+w(r(n).text),1)]),_:1},8,["href"])])):h("",!0),v.value?(a(),u("div",qt,[k(zt)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Jt,[V[1]||(V[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Yt,[(S=r(i).prev)!=null&&S.link?(a(),g(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,Xt),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,Qt)]}),_:1},8,["href"])):h("",!0)]),p("div",Zt,[(A=r(i).next)!=null&&A.link?(a(),g(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,xt),p("span",{class:"title",innerHTML:r(i).next.text},null,8,en)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),nn=$(tn,[["__scopeId","data-v-4f9813fa"]]),sn={class:"container"},on={class:"aside-container"},an={class:"aside-content"},rn={class:"content"},ln={class:"content-container"},cn={class:"main"},un=m({__name:"VPDoc",setup(o){const{theme:e}=L(),t=ee(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,d)=>{const _=R("Content");return a(),u("div",{class:I(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[c(v.$slots,"doc-top",{},void 0,!0),p("div",sn,[r(n)?(a(),u("div",{key:0,class:I(["aside",{"left-aside":r(i)}])},[d[0]||(d[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",on,[p("div",an,[k(Et,null,{"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",rn,[p("div",ln,[c(v.$slots,"doc-before",{},void 0,!0),p("main",cn,[k(_,{class:I(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(nn,null,{"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),dn=$(un,[["__scopeId","data-v-83890dd9"]]),vn=m({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),s=y(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),g(E(s.value),{class:I(["VPButton",[n.size,n.theme]]),href:n.href?r(me)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[O(w(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),pn=$(vn,[["__scopeId","data-v-14206e74"]]),fn=["src","alt"],hn=m({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=R("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(ve)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,fn)):(a(),u(M,{key:1},[k(s,G({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,G({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Q=$(hn,[["__scopeId","data-v-35a7d0b8"]]),mn={class:"container"},_n={class:"main"},bn={key:0,class:"name"},kn=["innerHTML"],gn=["innerHTML"],$n=["innerHTML"],yn={key:0,class:"actions"},Pn={key:0,class:"image"},Sn={class:"image-container"},Vn=m({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=q("hero-image-slot-exists");return(t,s)=>(a(),u("div",{class:I(["VPHero",{"has-image":t.image||r(e)}])},[p("div",mn,[p("div",_n,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",bn,[p("span",{innerHTML:t.name,class:"clip"},null,8,kn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,gn)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,$n)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",yn,[(a(!0),u(M,null,B(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[k(pn,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",Pn,[p("div",Sn,[s[0]||(s[0]=p("div",{class:"image-bg"},null,-1)),c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),g(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),Ln=$(Vn,[["__scopeId","data-v-955009fc"]]),Tn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).hero?(a(),g(Ln,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Nn={class:"box"},wn={key:0,class:"icon"},In=["innerHTML"],Mn=["innerHTML"],An=["innerHTML"],Cn={key:4,class:"link-text"},Bn={class:"link-text-value"},Hn=m({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),g(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",Nn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",wn,[k(Q,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),g(Q,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,In)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Mn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,An)):h("",!0),e.linkText?(a(),u("div",Cn,[p("p",Bn,[O(w(e.linkText)+" ",1),t[0]||(t[0]=p("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),En=$(Hn,[["__scopeId","data-v-f5e9645b"]]),Dn={key:0,class:"VPFeatures"},Fn={class:"container"},On={class:"items"},Un=m({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),u("div",Dn,[p("div",Fn,[p("div",On,[(a(!0),u(M,null,B(s.features,i=>(a(),u("div",{key:i.title,class:I(["item",[t.value]])},[k(En,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),jn=$(Un,[["__scopeId","data-v-d0a190d7"]]),Gn=m({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).features?(a(),g(jn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),zn=m({__name:"VPHomeContent",setup(o){const{width:e}=We({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),u("div",{class:"vp-doc container",style:Te(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),Kn=$(zn,[["__scopeId","data-v-7a48a447"]]),Rn={class:"VPHome"},Wn=m({__name:"VPHome",setup(o){const{frontmatter:e}=L();return(t,s)=>{const n=R("Content");return a(),u("div",Rn,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Tn,null,{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),k(Gn),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),g(Kn,{key:0},{default:f(()=>[k(n)]),_:1})):(a(),g(n,{key:1}))])}}}),qn=$(Wn,[["__scopeId","data-v-cbb6ec48"]]),Jn={},Yn={class:"VPPage"};function Xn(o,e){const t=R("Content");return a(),u("div",Yn,[c(o.$slots,"page-top"),k(t),c(o.$slots,"page-bottom")])}const Qn=$(Jn,[["render",Xn]]),Zn=m({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>(a(),u("div",{class:I(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(n.$slots,"not-found",{key:0},()=>[k(mt)],!0):r(t).layout==="page"?(a(),g(Qn,{key:1},{"page-top":f(()=>[c(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),g(qn,{key:2},{"home-hero-before":f(()=>[c(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),g(E(r(t).layout),{key:3})):(a(),g(dn,{key:4},{"doc-top":f(()=>[c(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),xn=$(Zn,[["__scopeId","data-v-91765379"]]),es={class:"container"},ts=["innerHTML"],ns=["innerHTML"],ss=m({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:I(["VPFooter",{"has-sidebar":r(s)}])},[p("div",es,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,ts)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ns)):h("",!0)])],2)):h("",!0)}}),os=$(ss,[["__scopeId","data-v-c970a860"]]);function as(){const{theme:o,frontmatter:e}=L(),t=Ve([]),s=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const rs={class:"menu-text"},is={class:"header"},ls={class:"outline"},cs=m({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=L(),s=T(!1),n=T(0),i=T(),l=T();function v(b){var P;(P=i.value)!=null&&P.contains(b.target)||(s.value=!1)}F(s,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ie("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function _(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{s.value=!1}))}function V(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:d,class:I({open:s.value})},[p("span",rs,w(r(Ce)(r(t))),1),P[0]||(P[0]=p("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(a(),u("button",{key:1,onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)),k(de,{name:"flyout"},{default:f(()=>[s.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:_},[p("div",is,[p("a",{class:"top-link",href:"#",onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)]),p("div",ls,[k(Be,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),us=$(cs,[["__scopeId","data-v-bc9dc845"]]),ds={class:"container"},vs=["aria-expanded"],ps={class:"menu-text"},fs=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U(),{headers:n}=as(),{y:i}=we(),l=T(0);z(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{n.value=_e(t.value.outline??e.value.outline)});const v=y(()=>n.value.length===0),d=y(()=>v.value&&!s.value),_=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:v.value,fixed:d.value}));return(V,b)=>r(t).layout!=="home"&&(!d.value||r(i)>=l.value)?(a(),u("div",{key:0,class:I(_.value)},[p("div",ds,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",ps,w(r(e).sidebarMenuLabel||"Menu"),1)],8,vs)):h("",!0),k(us,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),hs=$(fs,[["__scopeId","data-v-070ab83d"]]);function ms(){const o=T(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=ee();return F(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const _s={},bs={class:"VPSwitch",type:"button",role:"switch"},ks={class:"check"},gs={key:0,class:"icon"};function $s(o,e){return a(),u("button",bs,[p("span",ks,[o.$slots.default?(a(),u("span",gs,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const ys=$(_s,[["render",$s],["__scopeId","data-v-4a1c76db"]]),Ps=m({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=L(),s=q("toggle-appearance",()=>{e.value=!e.value}),n=T("");return fe(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),g(ys,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:f(()=>l[0]||(l[0]=[p("span",{class:"vpi-sun sun"},null,-1),p("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),be=$(Ps,[["__scopeId","data-v-e40a8bb6"]]),Ss={key:0,class:"VPNavBarAppearance"},Vs=m({__name:"VPNavBarAppearance",setup(o){const{site:e}=L();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ss,[k(be)])):h("",!0)}}),Ls=$(Vs,[["__scopeId","data-v-af096f4a"]]),ke=T();let He=!1,ae=0;function Ts(o){const e=T(!1);if(te){!He&&Ns(),ae++;const t=F(ke,s=>{var n,i,l;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(l=o.onBlur)==null||l.call(o))});pe(()=>{t(),ae--,ae||ws()})}return qe(e)}function Ns(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function ws(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Is={class:"VPMenuLink"},Ms=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),u("div",Is,[k(D,{class:I({active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),ne=$(Ms,[["__scopeId","data-v-8b74d055"]]),As={class:"VPMenuGroup"},Cs={key:0,class:"title"},Bs=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",As,[e.text?(a(),u("p",Cs,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),u(M,null,["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),Hs=$(Bs,[["__scopeId","data-v-48c802d0"]]),Es={class:"VPMenu"},Ds={key:0,class:"items"},Fs=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",Es,[e.items?(a(),u("div",Ds,[(a(!0),u(M,null,B(e.items,s=>(a(),u(M,{key:JSON.stringify(s)},["link"in s?(a(),g(ne,{key:0,item:s},null,8,["item"])):"component"in s?(a(),g(E(s.component),G({key:1,ref_for:!0},s.props),null,16)):(a(),g(Hs,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Os=$(Fs,[["__scopeId","data-v-7dd3104a"]]),Us=["aria-expanded","aria-label"],js={key:0,class:"text"},Gs=["innerHTML"],zs={key:1,class:"vpi-more-horizontal icon"},Ks={class:"menu"},Rs=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=T(!1),t=T();Ts({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[n.button||n.icon?(a(),u("span",js,[n.icon?(a(),u("span",{key:0,class:I([n.icon,"option-icon"])},null,2)):h("",!0),n.button?(a(),u("span",{key:1,innerHTML:n.button},null,8,Gs)):h("",!0),i[3]||(i[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",zs))],8,Us),p("div",Ks,[k(Os,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(Rs,[["__scopeId","data-v-e5380155"]]),Ws=["href","aria-label","innerHTML"],qs=m({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),u("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Ws))}}),Js=$(qs,[["__scopeId","data-v-717b8b75"]]),Ys={class:"VPSocialLinks"},Xs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",Ys,[(a(!0),u(M,null,B(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),g(Js,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=$(Xs,[["__scopeId","data-v-ee7a9424"]]),Qs={key:0,class:"group translations"},Zs={class:"trans-title"},xs={key:1,class:"group"},eo={class:"item appearance"},to={class:"label"},no={class:"appearance-action"},so={key:2,class:"group"},oo={class:"item social-links"},ao=m({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=L(),{localeLinks:s,currentLang:n}=Y({correspondingLink:!0}),i=y(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(l,v)=>i.value?(a(),g(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(n).label?(a(),u("div",Qs,[p("p",Zs,w(r(n).label),1),(a(!0),u(M,null,B(r(s),d=>(a(),g(ne,{key:d.link,item:d},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",xs,[p("div",eo,[p("p",to,w(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",no,[k(be)])])])):h("",!0),r(t).socialLinks?(a(),u("div",so,[p("div",oo,[k($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),ro=$(ao,[["__scopeId","data-v-925effce"]]),io=["aria-expanded"],lo=m({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),u("button",{type:"button",class:I(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},t[1]||(t[1]=[p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)]),10,io))}}),co=$(lo,[["__scopeId","data-v-5dea55bf"]]),uo=["innerHTML"],vo=m({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),g(D,{class:I({VPNavBarMenuLink:!0,active:r(K)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,uo)]),_:1},8,["class","href","noIcon","target","rel"]))}}),po=$(vo,[["__scopeId","data-v-ed5ac1f6"]]),fo=m({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=L(),s=i=>"component"in i?!1:"link"in i?K(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=y(()=>s(e.item));return(i,l)=>(a(),g(ge,{class:I({VPNavBarMenuGroup:!0,active:r(K)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),ho={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},mo=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ho,[s[0]||(s[0]=p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(po,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props),null,16)):(a(),g(fo,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),_o=$(mo,[["__scopeId","data-v-e6d46098"]]);function bo(o){const{localeIndex:e,theme:t}=L();function s(n){var A,C,N;const i=n.split("."),l=(A=t.value.search)==null?void 0:A.options,v=l&&typeof l=="object",d=v&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,_=v&&l.translations||null;let V=d,b=_,P=o;const S=i.pop();for(const H of i){let j=null;const W=P==null?void 0:P[H];W&&(j=P=W);const se=b==null?void 0:b[H];se&&(j=b=se);const oe=V==null?void 0:V[H];oe&&(j=V=oe),W||(P=j),se||(b=j),oe||(V=j)}return(V==null?void 0:V[S])??(b==null?void 0:b[S])??(P==null?void 0:P[S])??""}return s}const ko=["aria-label"],go={class:"DocSearch-Button-Container"},$o={class:"DocSearch-Button-Placeholder"},ye=m({__name:"VPNavBarSearchButton",setup(o){const t=bo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",go,[n[0]||(n[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",$o,w(r(t)("button.buttonText")),1)]),n[1]||(n[1]=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,ko))}}),yo={class:"VPNavBarSearch"},Po={id:"local-search"},So={key:1,id:"docsearch"},Vo=m({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.lx_FSht0.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=L(),n=T(!1),i=T(!1);z(()=>{});function l(){n.value||(n.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function d(b){const P=b.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const _=T(!1);ie("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),_.value=!0)}),ie("/",b=>{d(b)||(b.preventDefault(),_.value=!0)});const V="local";return(b,P)=>{var S;return a(),u("div",yo,[r(V)==="local"?(a(),u(M,{key:0},[_.value?(a(),g(r(e),{key:0,onClose:P[0]||(P[0]=A=>_.value=!1)})):h("",!0),p("div",Po,[k(ye,{onClick:P[1]||(P[1]=A=>_.value=!0)})])],64)):r(V)==="algolia"?(a(),u(M,{key:1},[n.value?(a(),g(r(t),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",So,[k(ye,{onClick:l})]))],64)):h("",!0)])}}}),Lo=m({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),To=$(Lo,[["__scopeId","data-v-164c457f"]]),No=["href","rel","target"],wo={key:1},Io={key:2},Mo=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=L(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=y(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),l=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),v=y(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,_)=>(a(),u("div",{class:I(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(me)(r(n).link),rel:l.value,target:v.value},[c(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),g(Q,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",wo,w(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",Io,w(r(e).title),1)):h("",!0),c(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,No)],2))}}),Ao=$(Mo,[["__scopeId","data-v-28a961f9"]]),Co={class:"items"},Bo={class:"title"},Ho=m({__name:"VPNavBarTranslations",setup(o){const{theme:e}=L(),{localeLinks:t,currentLang:s}=Y({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),g(ge,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",Co,[p("p",Bo,w(r(s).label),1),(a(!0),u(M,null,B(r(t),l=>(a(),g(ne,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),Eo=$(Ho,[["__scopeId","data-v-c80d9ad0"]]),Do={class:"wrapper"},Fo={class:"container"},Oo={class:"title"},Uo={class:"content"},jo={class:"content-body"},Go=m({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=we(),{hasSidebar:s}=U(),{frontmatter:n}=L(),i=T({});return fe(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,v)=>(a(),u("div",{class:I(["VPNavBar",i.value])},[p("div",Do,[p("div",Fo,[p("div",Oo,[k(Ao,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",Uo,[p("div",jo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(Vo,{class:"search"}),k(_o,{class:"menu"}),k(Eo,{class:"translations"}),k(Ls,{class:"appearance"}),k(To,{class:"social-links"}),k(ro,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(co,{class:"hamburger",active:l.isScreenOpen,onClick:v[0]||(v[0]=d=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),zo=$(Go,[["__scopeId","data-v-822684d1"]]),Ko={key:0,class:"VPNavScreenAppearance"},Ro={class:"text"},Wo=m({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=L();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ko,[p("p",Ro,w(r(t).darkModeSwitchLabel||"Appearance"),1),k(be)])):h("",!0)}}),qo=$(Wo,[["__scopeId","data-v-ffb44008"]]),Jo=m({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Yo=$(Jo,[["__scopeId","data-v-27d04aeb"]]),Xo=m({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=q("close-screen");return(t,s)=>(a(),g(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:f(()=>[O(w(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),De=$(Xo,[["__scopeId","data-v-7179dbb7"]]),Qo={class:"VPNavScreenMenuGroupSection"},Zo={key:0,class:"title"},xo=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",Qo,[e.text?(a(),u("p",Zo,w(e.text),1)):h("",!0),(a(!0),u(M,null,B(e.items,s=>(a(),g(De,{key:s.text,item:s},null,8,["item"]))),128))]))}}),ea=$(xo,[["__scopeId","data-v-4b8941ac"]]),ta=["aria-controls","aria-expanded"],na=["innerHTML"],sa=["id"],oa={key:0,class:"item"},aa={key:1,class:"item"},ra={key:2,class:"group"},ia=m({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=T(!1),s=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:I(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,na),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,ta),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,B(i.items,v=>(a(),u(M,{key:JSON.stringify(v)},["link"in v?(a(),u("div",oa,[k(De,{item:v},null,8,["item"])])):"component"in v?(a(),u("div",aa,[(a(),g(E(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(a(),u("div",ra,[k(ea,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,sa)],2))}}),la=$(ia,[["__scopeId","data-v-875057a5"]]),ca={key:0,class:"VPNavScreenMenu"},ua=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ca,[(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(Yo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),G({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),g(la,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),da=m({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=L();return(t,s)=>r(e).socialLinks?(a(),g($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),va={class:"list"},pa=m({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=Y({correspondingLink:!0}),s=T(!1);function n(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:I(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[l[0]||(l[0]=p("span",{class:"vpi-languages icon lang"},null,-1)),O(" "+w(r(t).label)+" ",1),l[1]||(l[1]=p("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),p("ul",va,[(a(!0),u(M,null,B(r(e),v=>(a(),u("li",{key:v.link,class:"item"},[k(D,{class:"link",href:v.link},{default:f(()=>[O(w(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),fa=$(pa,[["__scopeId","data-v-362991c2"]]),ha={class:"container"},ma=m({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=T(null),t=Ie(te?document.body:null);return(s,n)=>(a(),g(de,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:f(()=>[s.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",ha,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(ua,{class:"menu"}),k(fa,{class:"translations"}),k(qo,{class:"appearance"}),k(da,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),_a=$(ma,[["__scopeId","data-v-833aabba"]]),ba={key:0,class:"VPNav"},ka=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=ms(),{frontmatter:n}=L(),i=y(()=>n.value.navbar!==!1);return he("close-screen",t),Z(()=>{te&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,v)=>i.value?(a(),u("header",ba,[k(zo,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(_a,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),ga=$(ka,[["__scopeId","data-v-f1e365da"]]),$a=["role","tabindex"],ya={key:1,class:"items"},Pa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:v,toggle:d}=gt(y(()=>e.item)),_=y(()=>v.value?"section":"div"),V=y(()=>n.value?"a":"div"),b=y(()=>v.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>n.value?void 0:"button"),S=y(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":l.value}]);function A(N){"key"in N&&N.key!=="Enter"||!e.item.link&&d()}function C(){e.item.link&&d()}return(N,H)=>{const j=R("VPSidebarItem",!0);return a(),g(E(_.value),{class:I(["VPSidebarItem",S.value])},{default:f(()=>[N.item.text?(a(),u("div",G({key:0,class:"item",role:P.value},Qe(N.item.items?{click:A,keydown:A}:{},!0),{tabindex:N.item.items&&0}),[H[1]||(H[1]=p("div",{class:"indicator"},null,-1)),N.item.link?(a(),g(D,{key:0,tag:V.value,class:"link",href:N.item.link,rel:N.item.rel,target:N.item.target},{default:f(()=>[(a(),g(E(b.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(E(b.value),{key:1,class:"text",innerHTML:N.item.text},null,8,["innerHTML"])),N.item.collapsed!=null&&N.item.items&&N.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Xe(C,["enter"]),tabindex:"0"},H[0]||(H[0]=[p("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):h("",!0)],16,$a)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",ya,[N.depth<5?(a(!0),u(M,{key:0},B(N.item.items,W=>(a(),g(j,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Sa=$(Pa,[["__scopeId","data-v-196b2e5f"]]),Va=m({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=T(!0);let t=null;return z(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),Ze(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),u(M,null,B(s.items,i=>(a(),u("div",{key:i.text,class:I(["group",{"no-transition":e.value}])},[k(Sa,{item:i,depth:0},null,8,["item"])],2))),128))}}),La=$(Va,[["__scopeId","data-v-9e426adc"]]),Ta={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Na=m({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=U(),s=o,n=T(null),i=Ie(te?document.body:null);F([s,n],()=>{var v;s.open?(i.value=!0,(v=n.value)==null||v.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return F(e,()=>{l.value+=1},{deep:!0}),(v,d)=>r(t)?(a(),u("aside",{key:0,class:I(["VPSidebar",{open:v.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=xe(()=>{},["stop"]))},[d[2]||(d[2]=p("div",{class:"curtain"},null,-1)),p("nav",Ta,[d[1]||(d[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(La,{items:r(e),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),wa=$(Na,[["__scopeId","data-v-18756405"]]),Ia=m({__name:"VPSkipLink",setup(o){const e=ee(),t=T();F(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),u(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),Ma=$(Ia,[["__scopeId","data-v-c3508ec8"]]),Aa=m({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=ee();F(()=>n.path,s),kt(e,s);const{frontmatter:i}=L(),l=Me(),v=y(()=>!!l["home-hero-image"]);return he("hero-image-slot-exists",v),(d,_)=>{const V=R("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:I(["Layout",r(i).pageClass])},[c(d.$slots,"layout-top",{},void 0,!0),k(Ma),k(rt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k(ga,null,{"nav-bar-title-before":f(()=>[c(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(hs,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k(wa,{open:r(e)},{"sidebar-nav-before":f(()=>[c(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(xn,null,{"page-top":f(()=>[c(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(os),c(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(V,{key:1}))}}}),Ca=$(Aa,[["__scopeId","data-v-a9a9e638"]]),Pe={Layout:Ca,enhanceApp:({app:o})=>{o.component("Badge",st)}},Ba=o=>{if(typeof document>"u")return{stabilizeScrollPosition:n=>async(...i)=>n(...i)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...n)=>{const i=s(...n),l=o.value;if(!l)return i;const v=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-v,i}}},Fe="vitepress:tabSharedState",J=typeof localStorage<"u"?localStorage:null,Oe="vitepress:tabsSharedState",Ha=()=>{const o=J==null?void 0:J.getItem(Oe);if(o)try{return JSON.parse(o)}catch{}return{}},Ea=o=>{J&&J.setItem(Oe,JSON.stringify(o))},Da=o=>{const e=et({});F(()=>e.content,(t,s)=>{t&&s&&Ea(t)},{deep:!0}),o.provide(Fe,e)},Fa=(o,e)=>{const t=q(Fe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=Ha())});const s=T(),n=y({get(){var d;const l=e.value,v=o.value;if(l){const _=(d=t.content)==null?void 0:d[l];if(_&&v.includes(_))return _}else{const _=s.value;if(_)return _}return v[0]},set(l){const v=e.value;v?t.content&&(t.content[v]=l):s.value=l}});return{selected:n,select:l=>{n.value=l}}};let Se=0;const Oa=()=>(Se++,""+Se);function Ua(){const o=Me();return y(()=>{var s;const t=(s=o.default)==null?void 0:s.call(o);return t?t.filter(n=>typeof n.type=="object"&&"__name"in n.type&&n.type.__name==="PluginTabsTab"&&n.props).map(n=>{var i;return(i=n.props)==null?void 0:i.label}):[]})}const Ue="vitepress:tabSingleState",ja=o=>{he(Ue,o)},Ga=()=>{const o=q(Ue);if(!o)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return o},za={class:"plugin-tabs"},Ka=["id","aria-selected","aria-controls","tabindex","onClick"],Ra=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(o){const e=o,t=Ua(),{selected:s,select:n}=Fa(t,tt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Ba(i),v=l(n),d=T([]),_=b=>{var A;const P=t.value.indexOf(s.value);let S;b.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:b.key==="ArrowRight"&&(S=P(a(),u("div",za,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:_},[(a(!0),u(M,null,B(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(V)}`,ref_for:!0,ref_key:"buttonRefs",ref:d,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===r(s),"aria-controls":`panel-${S}-${r(V)}`,tabindex:S===r(s)?0:-1,onClick:()=>r(v)(S)},w(S),9,Ka))),128))],544),c(b.$slots,"default")]))}}),Wa=["id","aria-labelledby"],qa=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=Ga();return(s,n)=>r(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${r(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Wa)):h("",!0)}}),Ja=$(qa,[["__scopeId","data-v-9b0d03d2"]]),Ya=o=>{Da(o),o.component("PluginTabs",Ra),o.component("PluginTabsTab",Ja)},Qa={extends:Pe,Layout(){return nt(Pe.Layout,null,{})},enhanceApp({app:o,router:e,siteData:t}){Ya(o)}};export{Qa as R,bo as c,L as u}; diff --git a/dev/assets/docker.md.CFpyQib2.js b/dev/assets/docker.md.CeXB9QeU.js similarity index 98% rename from dev/assets/docker.md.CFpyQib2.js rename to dev/assets/docker.md.CeXB9QeU.js index 063ec24..33641f7 100644 --- a/dev/assets/docker.md.CFpyQib2.js +++ b/dev/assets/docker.md.CeXB9QeU.js @@ -1,2 +1,2 @@ -import{_ as e,c as s,a5 as a,o as t}from"./chunks/framework.BvdfcH24.js";const k=JSON.parse('{"title":"Docker build and run","description":"","frontmatter":{},"headers":[],"relativePath":"docker.md","filePath":"docker.md","lastUpdated":null}'),n={name:"docker.md"};function l(r,i,o,h,d,p){return t(),s("div",null,i[0]||(i[0]=[a(`

Docker build and run

The ReefGuideAPI.jl package has an associated Dockerfile and build/publish process. This means you can run an instance of the ReefGuideAPI.jl package without needing to compile/build it with a local Julia installation. You will be able to view the latest published versions of the Docker image on the repository packages page.

Mounting files and required data

As mentioned in Getting Started, the ReefGuideAPI.jl package currently requires

  • a config.toml file and

  • a set of input data files

Please include these in a folder called data in your working directory.

When running the below commands, it is assumed you have data available locally with the required files.

Note: Due to how Docker excludes . files, we have named the config file config.toml in the data folder. This is required to launch the server.

To build from src files using Docker

bash
docker build . --target reefguide-src -t reefguide

To build from src files using Docker Compose

bash
docker compose up --build reefguide-src

To run with mounted files (launch server) using Docker

bash
docker run -p 8000:8000 -v ./data:/data/reefguide reefguide

To run with mounted files (launch server) using Docker Compose

bash
docker compose up reefguide-src

To run with mounted files (interactive shell) using Docker

This will start a Julia shell where ReefGuideAPI is compiled and ready for use e.g.

julia
using ReefGuideAPI
+import{_ as e,c as s,a5 as a,o as t}from"./chunks/framework.DT0TDSCa.js";const k=JSON.parse('{"title":"Docker build and run","description":"","frontmatter":{},"headers":[],"relativePath":"docker.md","filePath":"docker.md","lastUpdated":null}'),n={name:"docker.md"};function l(r,i,o,h,d,p){return t(),s("div",null,i[0]||(i[0]=[a(`

Docker build and run

The ReefGuideAPI.jl package has an associated Dockerfile and build/publish process. This means you can run an instance of the ReefGuideAPI.jl package without needing to compile/build it with a local Julia installation. You will be able to view the latest published versions of the Docker image on the repository packages page.

Mounting files and required data

As mentioned in Getting Started, the ReefGuideAPI.jl package currently requires

  • a config.toml file and

  • a set of input data files

Please include these in a folder called data in your working directory.

When running the below commands, it is assumed you have data available locally with the required files.

Note: Due to how Docker excludes . files, we have named the config file config.toml in the data folder. This is required to launch the server.

To build from src files using Docker

bash
docker build . --target reefguide-src -t reefguide

To build from src files using Docker Compose

bash
docker compose up --build reefguide-src

To run with mounted files (launch server) using Docker

bash
docker run -p 8000:8000 -v ./data:/data/reefguide reefguide

To run with mounted files (launch server) using Docker Compose

bash
docker compose up reefguide-src

To run with mounted files (interactive shell) using Docker

This will start a Julia shell where ReefGuideAPI is compiled and ready for use e.g.

julia
using ReefGuideAPI
 ReefGuideAPI.start_server("/data/reefguide/config.toml")
bash
docker run --rm --interactive --entrypoint="julia" --tty -v ./data:/data/reefguide reefguide
`,20)]))}const c=e(n,[["render",l]]);export{k as __pageData,c as default}; diff --git a/dev/assets/docker.md.CFpyQib2.lean.js b/dev/assets/docker.md.CeXB9QeU.lean.js similarity index 98% rename from dev/assets/docker.md.CFpyQib2.lean.js rename to dev/assets/docker.md.CeXB9QeU.lean.js index 063ec24..33641f7 100644 --- a/dev/assets/docker.md.CFpyQib2.lean.js +++ b/dev/assets/docker.md.CeXB9QeU.lean.js @@ -1,2 +1,2 @@ -import{_ as e,c as s,a5 as a,o as t}from"./chunks/framework.BvdfcH24.js";const k=JSON.parse('{"title":"Docker build and run","description":"","frontmatter":{},"headers":[],"relativePath":"docker.md","filePath":"docker.md","lastUpdated":null}'),n={name:"docker.md"};function l(r,i,o,h,d,p){return t(),s("div",null,i[0]||(i[0]=[a(`

Docker build and run

The ReefGuideAPI.jl package has an associated Dockerfile and build/publish process. This means you can run an instance of the ReefGuideAPI.jl package without needing to compile/build it with a local Julia installation. You will be able to view the latest published versions of the Docker image on the repository packages page.

Mounting files and required data

As mentioned in Getting Started, the ReefGuideAPI.jl package currently requires

  • a config.toml file and

  • a set of input data files

Please include these in a folder called data in your working directory.

When running the below commands, it is assumed you have data available locally with the required files.

Note: Due to how Docker excludes . files, we have named the config file config.toml in the data folder. This is required to launch the server.

To build from src files using Docker

bash
docker build . --target reefguide-src -t reefguide

To build from src files using Docker Compose

bash
docker compose up --build reefguide-src

To run with mounted files (launch server) using Docker

bash
docker run -p 8000:8000 -v ./data:/data/reefguide reefguide

To run with mounted files (launch server) using Docker Compose

bash
docker compose up reefguide-src

To run with mounted files (interactive shell) using Docker

This will start a Julia shell where ReefGuideAPI is compiled and ready for use e.g.

julia
using ReefGuideAPI
+import{_ as e,c as s,a5 as a,o as t}from"./chunks/framework.DT0TDSCa.js";const k=JSON.parse('{"title":"Docker build and run","description":"","frontmatter":{},"headers":[],"relativePath":"docker.md","filePath":"docker.md","lastUpdated":null}'),n={name:"docker.md"};function l(r,i,o,h,d,p){return t(),s("div",null,i[0]||(i[0]=[a(`

Docker build and run

The ReefGuideAPI.jl package has an associated Dockerfile and build/publish process. This means you can run an instance of the ReefGuideAPI.jl package without needing to compile/build it with a local Julia installation. You will be able to view the latest published versions of the Docker image on the repository packages page.

Mounting files and required data

As mentioned in Getting Started, the ReefGuideAPI.jl package currently requires

  • a config.toml file and

  • a set of input data files

Please include these in a folder called data in your working directory.

When running the below commands, it is assumed you have data available locally with the required files.

Note: Due to how Docker excludes . files, we have named the config file config.toml in the data folder. This is required to launch the server.

To build from src files using Docker

bash
docker build . --target reefguide-src -t reefguide

To build from src files using Docker Compose

bash
docker compose up --build reefguide-src

To run with mounted files (launch server) using Docker

bash
docker run -p 8000:8000 -v ./data:/data/reefguide reefguide

To run with mounted files (launch server) using Docker Compose

bash
docker compose up reefguide-src

To run with mounted files (interactive shell) using Docker

This will start a Julia shell where ReefGuideAPI is compiled and ready for use e.g.

julia
using ReefGuideAPI
 ReefGuideAPI.start_server("/data/reefguide/config.toml")
bash
docker run --rm --interactive --entrypoint="julia" --tty -v ./data:/data/reefguide reefguide
`,20)]))}const c=e(n,[["render",l]]);export{k as __pageData,c as default}; diff --git a/dev/assets/getting_started.md.DKqyPY1d.js b/dev/assets/getting_started.md.ArdKq2gR.js similarity index 99% rename from dev/assets/getting_started.md.DKqyPY1d.js rename to dev/assets/getting_started.md.ArdKq2gR.js index d5b0c6a..d750b6d 100644 --- a/dev/assets/getting_started.md.DKqyPY1d.js +++ b/dev/assets/getting_started.md.ArdKq2gR.js @@ -1,4 +1,4 @@ -import{_ as e,c as i,a5 as a,o as t}from"./chunks/framework.BvdfcH24.js";const k=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting_started.md","filePath":"getting_started.md","lastUpdated":null}'),n={name:"getting_started.md"};function l(p,s,o,h,d,r){return t(),i("div",null,s[0]||(s[0]=[a(`

Getting Started

Setup

Initialize the project the usual way:

julia
]instantiate

A TOML file should be defined indicating location of the MPA dataset. These are currently the files/data created in Step/Script 1a in https://github.com/open-AIMS/GBR-reef-guidance-assessment

toml
[prepped_data]
+import{_ as e,c as i,a5 as a,o as t}from"./chunks/framework.DT0TDSCa.js";const k=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting_started.md","filePath":"getting_started.md","lastUpdated":null}'),n={name:"getting_started.md"};function l(p,s,o,h,d,r){return t(),i("div",null,s[0]||(s[0]=[a(`

Getting Started

Setup

Initialize the project the usual way:

julia
]instantiate

A TOML file should be defined indicating location of the MPA dataset. These are currently the files/data created in Step/Script 1a in https://github.com/open-AIMS/GBR-reef-guidance-assessment

toml
[prepped_data]
 PREPPED_DATA_DIR = "C:/some_path_to_data/MPA/"
 
 [server_config]
diff --git a/dev/assets/getting_started.md.DKqyPY1d.lean.js b/dev/assets/getting_started.md.ArdKq2gR.lean.js
similarity index 99%
rename from dev/assets/getting_started.md.DKqyPY1d.lean.js
rename to dev/assets/getting_started.md.ArdKq2gR.lean.js
index d5b0c6a..d750b6d 100644
--- a/dev/assets/getting_started.md.DKqyPY1d.lean.js
+++ b/dev/assets/getting_started.md.ArdKq2gR.lean.js
@@ -1,4 +1,4 @@
-import{_ as e,c as i,a5 as a,o as t}from"./chunks/framework.BvdfcH24.js";const k=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting_started.md","filePath":"getting_started.md","lastUpdated":null}'),n={name:"getting_started.md"};function l(p,s,o,h,d,r){return t(),i("div",null,s[0]||(s[0]=[a(`

Getting Started

Setup

Initialize the project the usual way:

julia
]instantiate

A TOML file should be defined indicating location of the MPA dataset. These are currently the files/data created in Step/Script 1a in https://github.com/open-AIMS/GBR-reef-guidance-assessment

toml
[prepped_data]
+import{_ as e,c as i,a5 as a,o as t}from"./chunks/framework.DT0TDSCa.js";const k=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting_started.md","filePath":"getting_started.md","lastUpdated":null}'),n={name:"getting_started.md"};function l(p,s,o,h,d,r){return t(),i("div",null,s[0]||(s[0]=[a(`

Getting Started

Setup

Initialize the project the usual way:

julia
]instantiate

A TOML file should be defined indicating location of the MPA dataset. These are currently the files/data created in Step/Script 1a in https://github.com/open-AIMS/GBR-reef-guidance-assessment

toml
[prepped_data]
 PREPPED_DATA_DIR = "C:/some_path_to_data/MPA/"
 
 [server_config]
diff --git a/dev/assets/index.md.kAlQC9BQ.js b/dev/assets/index.md.CBMAENFQ.js
similarity index 90%
rename from dev/assets/index.md.kAlQC9BQ.js
rename to dev/assets/index.md.CBMAENFQ.js
index 4d3fd0e..88e0294 100644
--- a/dev/assets/index.md.kAlQC9BQ.js
+++ b/dev/assets/index.md.CBMAENFQ.js
@@ -1 +1 @@
-import{_ as t,c as r,j as e,a as i,o as s}from"./chunks/framework.BvdfcH24.js";const m=JSON.parse('{"title":"ReefGuideAPI.jl","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),n={name:"index.md"};function d(l,a,o,p,f,c){return s(),r("div",null,a[0]||(a[0]=[e("h1",{id:"reefguideapi-jl",tabindex:"-1"},[i("ReefGuideAPI.jl "),e("a",{class:"header-anchor",href:"#reefguideapi-jl","aria-label":'Permalink to "ReefGuideAPI.jl"'},"​")],-1),e("p",null,"An API for supporting reef suitability assessments.",-1)]))}const x=t(n,[["render",d]]);export{m as __pageData,x as default};
+import{_ as t,c as r,j as e,a as i,o as s}from"./chunks/framework.DT0TDSCa.js";const m=JSON.parse('{"title":"ReefGuideAPI.jl","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),n={name:"index.md"};function d(l,a,o,p,f,c){return s(),r("div",null,a[0]||(a[0]=[e("h1",{id:"reefguideapi-jl",tabindex:"-1"},[i("ReefGuideAPI.jl "),e("a",{class:"header-anchor",href:"#reefguideapi-jl","aria-label":'Permalink to "ReefGuideAPI.jl"'},"​")],-1),e("p",null,"An API for supporting reef suitability assessments.",-1)]))}const x=t(n,[["render",d]]);export{m as __pageData,x as default};
diff --git a/dev/assets/index.md.kAlQC9BQ.lean.js b/dev/assets/index.md.CBMAENFQ.lean.js
similarity index 90%
rename from dev/assets/index.md.kAlQC9BQ.lean.js
rename to dev/assets/index.md.CBMAENFQ.lean.js
index 4d3fd0e..88e0294 100644
--- a/dev/assets/index.md.kAlQC9BQ.lean.js
+++ b/dev/assets/index.md.CBMAENFQ.lean.js
@@ -1 +1 @@
-import{_ as t,c as r,j as e,a as i,o as s}from"./chunks/framework.BvdfcH24.js";const m=JSON.parse('{"title":"ReefGuideAPI.jl","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),n={name:"index.md"};function d(l,a,o,p,f,c){return s(),r("div",null,a[0]||(a[0]=[e("h1",{id:"reefguideapi-jl",tabindex:"-1"},[i("ReefGuideAPI.jl "),e("a",{class:"header-anchor",href:"#reefguideapi-jl","aria-label":'Permalink to "ReefGuideAPI.jl"'},"​")],-1),e("p",null,"An API for supporting reef suitability assessments.",-1)]))}const x=t(n,[["render",d]]);export{m as __pageData,x as default};
+import{_ as t,c as r,j as e,a as i,o as s}from"./chunks/framework.DT0TDSCa.js";const m=JSON.parse('{"title":"ReefGuideAPI.jl","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),n={name:"index.md"};function d(l,a,o,p,f,c){return s(),r("div",null,a[0]||(a[0]=[e("h1",{id:"reefguideapi-jl",tabindex:"-1"},[i("ReefGuideAPI.jl "),e("a",{class:"header-anchor",href:"#reefguideapi-jl","aria-label":'Permalink to "ReefGuideAPI.jl"'},"​")],-1),e("p",null,"An API for supporting reef suitability assessments.",-1)]))}const x=t(n,[["render",d]]);export{m as __pageData,x as default};
diff --git a/dev/docker.html b/dev/docker.html
index 1594295..72d191f 100644
--- a/dev/docker.html
+++ b/dev/docker.html
@@ -8,18 +8,18 @@
     
     
     
-    
+    
     
-    
-    
-    
+    
+    
+    
     
     
   
   
     
Skip to content

Docker build and run

The ReefGuideAPI.jl package has an associated Dockerfile and build/publish process. This means you can run an instance of the ReefGuideAPI.jl package without needing to compile/build it with a local Julia installation. You will be able to view the latest published versions of the Docker image on the repository packages page.

Mounting files and required data

As mentioned in Getting Started, the ReefGuideAPI.jl package currently requires

  • a config.toml file and

  • a set of input data files

Please include these in a folder called data in your working directory.

When running the below commands, it is assumed you have data available locally with the required files.

Note: Due to how Docker excludes . files, we have named the config file config.toml in the data folder. This is required to launch the server.

To build from src files using Docker

bash
docker build . --target reefguide-src -t reefguide

To build from src files using Docker Compose

bash
docker compose up --build reefguide-src

To run with mounted files (launch server) using Docker

bash
docker run -p 8000:8000 -v ./data:/data/reefguide reefguide

To run with mounted files (launch server) using Docker Compose

bash
docker compose up reefguide-src

To run with mounted files (interactive shell) using Docker

This will start a Julia shell where ReefGuideAPI is compiled and ready for use e.g.

julia
using ReefGuideAPI
 ReefGuideAPI.start_server("/data/reefguide/config.toml")
bash
docker run --rm --interactive --entrypoint="julia" --tty -v ./data:/data/reefguide reefguide
- + \ No newline at end of file diff --git a/dev/getting_started.html b/dev/getting_started.html index c532d8c..1d85c2c 100644 --- a/dev/getting_started.html +++ b/dev/getting_started.html @@ -8,11 +8,11 @@ - + - - - + + + @@ -43,7 +43,7 @@ (sandbox) julia> ]add Revise Infiltrator Chairmarks (sandbox) julia> ]dev ..

Copy the quickstart to a file (e.g., dev_server.jl).

Create the .config.toml file and save to the sandbox directory.

Assuming VS Code is configured to default to the sandbox environment and start the Julia REPL at project root:

julia
;cd sandbox
 include("dev_server.jl")

Note that the server now caches the initially loaded spatial data in between server launches to reduce downtime. It will be necessary to restart the Julia session to reload spatial data.

Performance notes

The config setting COG_THREADS controls how many threads should be requested when writing out COGs. Ideally this will be set to at least 2 (preferably 4). Higher values do seem to reduce write times but with diminishing returns (tested up to 8). Locally, write times with four threads configured range from 10 to 15 seconds.

Reef edge alignment for site searching

identify_potential_sites_edges() can be used to identify potential sites that only align with the nearest reef edge (or specified rotations away from this angle). This method works by identifying the closest edge of reef polygon geometries that have been converted into lines.

The following processing is required before use:

  • Reef polygons should be simplified (GO.simplify()) and buffered to avoid matching possibly inaccurate reef edges.

  • Simplified reef polygons should be provided as vertex-vertex lines with polygon_to_lines().

  • Require raster of target pixels to search, and their indices (currently a vector of CartesianIndices for identifying search pixels). Use findall(bool_search_raster) to return pixel indices.

  • Raster of search pixels should be masked by reef polygons or simplified reef polygons.

  • The target region name should be specified in GBRMPA format.

    • E.g. "Townsville/Whitsunday Management Area" rather than "Townsville-Whitsunday".

Parquet assessment additional setup

  • A parquet GeoDataFrame must be loaded and filtered for unsuitable pixels based on user criteria thresholds using a Dict and within_thresholds().

  • lon and lat columns (FLoat64) must be added to the GeoDataFrame.

    • E.g. valid_pixels.lon = first.(GI.coordinates.(valid_pixels.geometry))

    The column used for masking should be the same as the column specified as geometry_col in identify_potential_sites_edges(default =:geometry).

- + \ No newline at end of file diff --git a/dev/hashmap.json b/dev/hashmap.json index b6abe4d..70f68fc 100644 --- a/dev/hashmap.json +++ b/dev/hashmap.json @@ -1 +1 @@ -{"api.md":"DehzNRDj","docker.md":"CFpyQib2","getting_started.md":"DKqyPY1d","index.md":"kAlQC9BQ"} +{"api.md":"Dxqu1QHi","docker.md":"CeXB9QeU","getting_started.md":"ArdKq2gR","index.md":"CBMAENFQ"} diff --git a/dev/index.html b/dev/index.html index 505630f..652cc7a 100644 --- a/dev/index.html +++ b/dev/index.html @@ -8,17 +8,17 @@ - + - - - + + +
Skip to content

ReefGuideAPI.jl

An API for supporting reef suitability assessments.

- + \ No newline at end of file