diff --git a/dev/404.html b/dev/404.html index cb12e9e..20ae255 100644 --- a/dev/404.html +++ b/dev/404.html @@ -5,17 +5,17 @@ 404 | ReefGuideAPI.jl - - + + - +
- + \ No newline at end of file diff --git a/dev/api.html b/dev/api.html index 575e3d2..ceebd63 100644 --- a/dev/api.html +++ b/dev/api.html @@ -5,21 +5,25 @@ API | ReefGuideAPI.jl - - + + - + - - - + + + -
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
+    
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._write_cog Method
julia
_write_cog(file_path::String, data::Raster, config::Dict)::Nothing

Write out a COG using common options.

Arguments

  • file_path : Path to write data out to

  • data : Raster data to write out

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_lookup Method
julia
apply_criteria_lookup(
+    reg_criteria,
+    rtype::Symbol,
+    ruleset::Vector{CriteriaBounds{Function}}
+)

Filter lookup table by applying user defined ruleset criteria.

Arguments

  • reg_criteria : RegionalCriteria containing valid_rtype lookup table for filtering.

  • rtype : Flats or slope category for assessment.

  • ruleset : User defined ruleset for upper and lower bounds.

Returns

Filtered lookup table containing points that meet all criteria in ruleset.

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 +32,35 @@
     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 of suitability scores.

  • 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.assess_region Method
julia
assess_region(reg_assess_data, reg, qp, rtype)

Perform raster suitability assessment based on user defined criteria.

Arguments

  • reg_assess_data : Dictionary containing the regional data paths, reef outlines and full region names.

  • reg : Name of the region being assessed (format Cairns-Cooktown rather than Cairns/Cooktown Management Area).

  • qp : Dict containing bounds for each variable being filtered.

  • rtype : Type of zone to assess (flats or slopes).

Returns

GeoTiff file of surrounding hectare suitability (1-100%) based on the criteria bounds input by a user.

source

ReefGuideAPI.assess_sites Method
julia
assess_sites(
+    reg_assess_data::OrderedDict,
+    reg::String,
+    rtype::String,
+    pixel_criteria::Dict,
+    site_criteria::Dict,
+    assess_locs::Raster
+)

Arguments

  • reg_assess_data : Regional assessment data

  • reg : Short region name

  • rtype : Slopes or Flats assessment type

  • pixel_criteria : parameters to assess specific locations with

  • site_criteria : parameters to assess sites based on their polygonal representation

  • assess_locs : Raster of suitability scores for each valid pixel

Returns

GeoDataFrame of all potential sites

source

ReefGuideAPI.buffer_simplify Method
julia
buffer_simplify(
+    gdf::DataFrame;
+    number_verts::Int64=30,
+    buffer_dist_m::Int64=40
+)::Vector{GeoInterface.Wrappers.WrapperGeometry}

Simplify and buffer the polygons in a GeoDataFrame to account for uncertainty and inaccuracies in the reef outlines.

Arguments

  • gdf : GeoDataFrame containing the reef polygons in gdf.geometry.

  • number_verts : Number of vertices to simplify the reefs to. Default is 30 vertices.

  • buffer_dist_m : Buffering distance in meters to account for innacuracies in reef outlines. Default distance is 40m.

Returns

Vector containing buffered and simplified reef polygons

source

ReefGuideAPI.cache_filename Method
julia
cache_filename(qp::Dict, config::Dict, suffix::String, ext::String)

Generate a filename for a cache.

Arguments

  • qp : Query parameters to hash

  • config : app configuration (to extract cache parent directory from)

  • suffix : a suffix to use in the filename (pass "" if none required)

  • ext : file extension to use

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_distances Method
julia
filter_distances(
+    target_rast::Raster,
+    gdf::DataFrame,
+    dist_nm
+)::Raster

Exclude pixels in target_rast that are beyond dist_nm (nautical miles) from a geometry in gdf. target_rast and gdf should be in the same CRS (EPSG:7844 / GDA2020 for GBR-reef-guidance-assessment).

Arguments

  • target_rast : Boolean raster of suitable pixels to filter.

  • gdf : DataFrame with geometry column that contains vector objects of interest.

  • dist_nm : Filtering distance from geometry object in nautical miles.

Returns

  • tmp_areas : Raster of filtered pixels containing only pixels within target distance

from a geometry centroid.

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_edge_aligned_sites()).

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_edge_aligned_sites() (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_edge_aligned_sites Method
julia
identify_edge_aligned_sites(
     df::DataFrame,
     search_pixels::DataFrame,
     res::Float64,
@@ -54,7 +73,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 : Region name, e.g. "Cairns-Cooktown" or "FarNorthern".

  • 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_edge_aligned_sites Method
julia
identify_edge_aligned_sites(
     rst_stack::RasterStack,
     search_pixels::DataFrame,
     gdf::DataFrame,
@@ -65,31 +84,27 @@
     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, 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(
+)::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.initialize_regional_data_cache Method
julia
initialize_regional_data_cache(reef_data_path::String, reg_cache_fn::String)

Create initial regional data store with data from reef_data_path, excluding geospatial data and save to reg_cache_fn path.

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.mask_region Method
julia
mask_region(reg_assess_data, reg, qp, rtype)

Arguments

  • reg_assess_data : Regional assessment data

  • reg : The region name to assess

  • qp : query parameters

  • rtype : region type (one of :slopes or :flats)

Returns

Raster of region with locations that meet criteria masked.

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(destination_path::String, df::DataFrame)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: destination_path.

Arguments

  • destination_path : File path to write geojson file to.

  • df : DataFrame intended for writing to geojson file.

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.proportion_suitable Method
julia
proportion_suitable(subsection::BitMatrix, square_offset::Tuple=(-4,5))::Matrix{Int16}

Calculate the the proportion of the subsection that is suitable for deployments. The subsection is the surrounding a rough hectare area centred on each cell of a raster marked as being suitable according to user-selected criteria.

Cells on the edges of a raster object are assessed using a smaller surrounding area, rather than shifting the window inward. In usual applications, there will be no target pixel close to the edge due to the use of buffer areas.

Arguments

  • x : Matrix of boolean pixels after filtering with user criteria.

  • square_offset : The number of pixels +/- around a center "target" pixel to assess as the moving window. Defaults to (-4, 5). Assuming a 10m² pixel, the default square_offset resolves to a one hectare area.

Returns

Matrix of values 0 - 100 indicating the percentage of the area around the target pixel that meet suitability criteria.

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.threshold_mask Method
julia
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.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.DYWJQ0KO.js b/dev/assets/api.md.DYWJQ0KO.js new file mode 100644 index 0000000..acd82d6 --- /dev/null +++ b/dev/assets/api.md.DYWJQ0KO.js @@ -0,0 +1,87 @@ +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.CX_bWI7S.js";const ys=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:""},R={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},T={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:""},O={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""};function os(hs,s,ds,ks,gs,cs){const a=r("Badge");return o(),p("div",null,[s[157]||(s[157]=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._write_cog-Tuple{String, Rasters.Raster, Dict}",href:"#ReefGuideAPI._write_cog-Tuple{String, Rasters.Raster, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._write_cog")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n('
julia
_write_cog(file_path::String, data::Raster, config::Dict)::Nothing

Write out a COG using common options.

Arguments

source

',5))]),i("details",y,[i("summary",null,[s[15]||(s[15]=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[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=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

Returns

Matrix with the resampled data.

source

',7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.apply_criteria_lookup-Tuple{RegionalCriteria, Symbol, Any}",href:"#ReefGuideAPI.apply_criteria_lookup-Tuple{RegionalCriteria, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_lookup")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
apply_criteria_lookup(
+    reg_criteria,
+    rtype::Symbol,
+    ruleset::Vector{CriteriaBounds{Function}}
+)

Filter lookup table by applying user defined ruleset criteria.

Arguments

Returns

Filtered lookup table containing points that meet all criteria in ruleset.

source

`,7))]),i("details",f,[i("summary",null,[s[21]||(s[21]=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[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=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

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",F,[i("summary",null,[s[24]||(s[24]=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[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n(`
julia
assess_reef_site(
+    rel_pix::DataFrame,
+    geom::GI.Wrappers.Polygon,
+    max_count::Float64,
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat;
+    degree_step::Float64=15.0,
+    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

Returns

source

`,7))]),i("details",b,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=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

Returns

source

`,7))]),i("details",m,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.assess_region-NTuple{4, Any}",href:"#ReefGuideAPI.assess_region-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_region")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
assess_region(reg_assess_data, reg, qp, rtype)

Perform raster suitability assessment based on user defined criteria.

Arguments

Returns

GeoTiff file of surrounding hectare suitability (1-100%) based on the criteria bounds input by a user.

source

',7))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.assess_sites-Tuple{OrderedCollections.OrderedDict, String, String, Dict, Dict, Rasters.Raster}",href:"#ReefGuideAPI.assess_sites-Tuple{OrderedCollections.OrderedDict, String, String, Dict, Dict, Rasters.Raster}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_sites")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n(`
julia
assess_sites(
+    reg_assess_data::OrderedDict,
+    reg::String,
+    rtype::String,
+    pixel_criteria::Dict,
+    site_criteria::Dict,
+    assess_locs::Raster
+)

Arguments

Returns

GeoDataFrame of all potential sites

source

`,6))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.buffer_simplify-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.buffer_simplify-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.buffer_simplify")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n(`
julia
buffer_simplify(
+    gdf::DataFrame;
+    number_verts::Int64=30,
+    buffer_dist_m::Int64=40
+)::Vector{GeoInterface.Wrappers.WrapperGeometry}

Simplify and buffer the polygons in a GeoDataFrame to account for uncertainty and inaccuracies in the reef outlines.

Arguments

Returns

Vector containing buffered and simplified reef polygons

source

`,7))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.cache_filename-Tuple{Dict, Dict, String, String}",href:"#ReefGuideAPI.cache_filename-Tuple{Dict, Dict, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.cache_filename")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
cache_filename(qp::Dict, config::Dict, suffix::String, ext::String)

Generate a filename for a cache.

Arguments

source

',5))]),i("details",j,[i("summary",null,[s[42]||(s[42]=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[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=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

Returns

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

source

`,7))]),i("details",R,[i("summary",null,[s[45]||(s[45]=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[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=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",I,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=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",D,[i("summary",null,[s[51]||(s[51]=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[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",v,[i("summary",null,[s[54]||(s[54]=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[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=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

Returns

source

`,8))]),i("details",T,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, DataFrames.DataFrame, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, DataFrames.DataFrame, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
filter_distances(
+    target_rast::Raster,
+    gdf::DataFrame,
+    dist_nm
+)::Raster

Exclude pixels in target_rast that are beyond dist_nm (nautical miles) from a geometry in gdf. target_rast and gdf should be in the same CRS (EPSG:7844 / GDA2020 for GBR-reef-guidance-assessment).

Arguments

Returns

from a geometry centroid.

source

`,8))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{Any, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{Any, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=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",G,[i("summary",null,[s[63]||(s[63]=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[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=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

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_edge_aligned_sites() (default=0.33).

source

',7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=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[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=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",P,[i("summary",null,[s[69]||(s[69]=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[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=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

source

',5))]),i("details",M,[i("summary",null,[s[72]||(s[72]=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[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=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

Arguments

Returns

Nothing

source

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

Helper method to retrieve points for a geometry.

source

',3))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.identify_edge_aligned_sites-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_edge_aligned_sites-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_edge_aligned_sites")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n(`
julia
identify_edge_aligned_sites(
+    df::DataFrame,
+    search_pixels::DataFrame,
+    res::Float64,
+    gdf::DataFrame,
+    x_dist::Union{Int64,Float64},
+    y_dist::Union{Int64,Float64},
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
+    reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}},
+    region::String;
+    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

Returns

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

source

`,7))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.identify_edge_aligned_sites-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_edge_aligned_sites-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_edge_aligned_sites")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n(`
julia
identify_edge_aligned_sites(
+    rst_stack::RasterStack,
+    search_pixels::DataFrame,
+    gdf::DataFrame,
+    x_dist::Union{Int64,Float64},
+    y_dist::Union{Int64,Float64},
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
+    region::String,
+    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

Returns

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

source

`,7))]),i("details",O,[i("summary",null,[s[84]||(s[84]=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[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=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

Returns

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

source

',7))]),i("details",V,[i("summary",null,[s[87]||(s[87]=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[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=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

Returns

Initial search box geometry.

source

`,7))]),i("details",q,[i("summary",null,[s[90]||(s[90]=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[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=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

source

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

Create initial regional data store with data from reef_data_path, excluding geospatial data and save to reg_cache_fn path.

source

',3))]),i("details",z,[i("summary",null,[s[96]||(s[96]=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[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

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",N,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.mask_region-NTuple{4, Any}",href:"#ReefGuideAPI.mask_region-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.mask_region")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
mask_region(reg_assess_data, reg, qp, rtype)

Arguments

Returns

Raster of region with locations that meet criteria masked.

source

',6))]),i("details",W,[i("summary",null,[s[102]||(s[102]=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[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",H,[i("summary",null,[s[105]||(s[105]=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[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

source

',5))]),i("details",$,[i("summary",null,[s[108]||(s[108]=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[109]||(s[109]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=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",Q,[i("summary",null,[s[111]||(s[111]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{String, DataFrames.DataFrame}",href:"#ReefGuideAPI.output_geojson-Tuple{String, DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[112]||(s[112]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[113]||(s[113]=n('
julia
output_geojson(destination_path::String, df::DataFrame)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: destination_path.

Arguments

source

',5))]),i("details",J,[i("summary",null,[s[114]||(s[114]=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[115]||(s[115]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[116]||(s[116]=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

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",Z,[i("summary",null,[s[117]||(s[117]=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[118]||(s[118]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[119]||(s[119]=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",X,[i("summary",null,[s[120]||(s[120]=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[121]||(s[121]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[122]||(s[122]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

source

',5))]),i("details",K,[i("summary",null,[s[123]||(s[123]=i("a",{id:"ReefGuideAPI.proportion_suitable-Tuple{BitMatrix}",href:"#ReefGuideAPI.proportion_suitable-Tuple{BitMatrix}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.proportion_suitable")],-1)),s[124]||(s[124]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[125]||(s[125]=n('
julia
proportion_suitable(subsection::BitMatrix, square_offset::Tuple=(-4,5))::Matrix{Int16}

Calculate the the proportion of the subsection that is suitable for deployments. The subsection is the surrounding a rough hectare area centred on each cell of a raster marked as being suitable according to user-selected criteria.

Cells on the edges of a raster object are assessed using a smaller surrounding area, rather than shifting the window inward. In usual applications, there will be no target pixel close to the edge due to the use of buffer areas.

Arguments

Returns

Matrix of values 0 - 100 indicating the percentage of the area around the target pixel that meet suitability criteria.

source

',8))]),i("details",Y,[i("summary",null,[s[126]||(s[126]=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[127]||(s[127]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[128]||(s[128]=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",ss,[i("summary",null,[s[129]||(s[129]=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[130]||(s[130]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[131]||(s[131]=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",is,[i("summary",null,[s[132]||(s[132]=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[133]||(s[133]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[134]||(s[134]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[135]||(s[135]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/39637e8d1926c44317ec99036d199c22251bfb19/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",es,[i("summary",null,[s[136]||(s[136]=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[137]||(s[137]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[138]||(s[138]=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",as,[i("summary",null,[s[139]||(s[139]=i("a",{id:"ReefGuideAPI.threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.threshold_mask")],-1)),s[140]||(s[140]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[141]||(s[141]=n('
julia
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

Arguments

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",ts,[i("summary",null,[s[142]||(s[142]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[143]||(s[143]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[144]||(s[144]=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",ns,[i("summary",null,[s[145]||(s[145]=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[146]||(s[146]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[147]||(s[147]=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",ls,[i("summary",null,[s[148]||(s[148]=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[149]||(s[149]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[150]||(s[150]=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",ps,[i("summary",null,[s[151]||(s[151]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[152]||(s[152]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[153]||(s[153]=n('
julia
warmup_cache(config_path::String)

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

source

',3))]),i("details",rs,[i("summary",null,[s[154]||(s[154]=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[155]||(s[155]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[156]||(s[156]=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 Es=l(h,[["render",os]]);export{ys as __pageData,Es as default}; diff --git a/dev/assets/api.md.DYWJQ0KO.lean.js b/dev/assets/api.md.DYWJQ0KO.lean.js new file mode 100644 index 0000000..acd82d6 --- /dev/null +++ b/dev/assets/api.md.DYWJQ0KO.lean.js @@ -0,0 +1,87 @@ +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.CX_bWI7S.js";const ys=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:""},R={class:"jldocstring custom-block",open:""},I={class:"jldocstring custom-block",open:""},D={class:"jldocstring custom-block",open:""},v={class:"jldocstring custom-block",open:""},T={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:""},O={class:"jldocstring custom-block",open:""},V={class:"jldocstring custom-block",open:""},q={class:"jldocstring custom-block",open:""},U={class:"jldocstring custom-block",open:""},z={class:"jldocstring custom-block",open:""},N={class:"jldocstring custom-block",open:""},W={class:"jldocstring custom-block",open:""},H={class:"jldocstring custom-block",open:""},$={class:"jldocstring custom-block",open:""},Q={class:"jldocstring custom-block",open:""},J={class:"jldocstring custom-block",open:""},Z={class:"jldocstring custom-block",open:""},X={class:"jldocstring custom-block",open:""},K={class:"jldocstring custom-block",open:""},Y={class:"jldocstring custom-block",open:""},ss={class:"jldocstring custom-block",open:""},is={class:"jldocstring custom-block",open:""},es={class:"jldocstring custom-block",open:""},as={class:"jldocstring custom-block",open:""},ts={class:"jldocstring custom-block",open:""},ns={class:"jldocstring custom-block",open:""},ls={class:"jldocstring custom-block",open:""},ps={class:"jldocstring custom-block",open:""},rs={class:"jldocstring custom-block",open:""};function os(hs,s,ds,ks,gs,cs){const a=r("Badge");return o(),p("div",null,[s[157]||(s[157]=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._write_cog-Tuple{String, Rasters.Raster, Dict}",href:"#ReefGuideAPI._write_cog-Tuple{String, Rasters.Raster, Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI._write_cog")],-1)),s[13]||(s[13]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[14]||(s[14]=n('
julia
_write_cog(file_path::String, data::Raster, config::Dict)::Nothing

Write out a COG using common options.

Arguments

source

',5))]),i("details",y,[i("summary",null,[s[15]||(s[15]=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[16]||(s[16]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[17]||(s[17]=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

Returns

Matrix with the resampled data.

source

',7))]),i("details",E,[i("summary",null,[s[18]||(s[18]=i("a",{id:"ReefGuideAPI.apply_criteria_lookup-Tuple{RegionalCriteria, Symbol, Any}",href:"#ReefGuideAPI.apply_criteria_lookup-Tuple{RegionalCriteria, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.apply_criteria_lookup")],-1)),s[19]||(s[19]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[20]||(s[20]=n(`
julia
apply_criteria_lookup(
+    reg_criteria,
+    rtype::Symbol,
+    ruleset::Vector{CriteriaBounds{Function}}
+)

Filter lookup table by applying user defined ruleset criteria.

Arguments

Returns

Filtered lookup table containing points that meet all criteria in ruleset.

source

`,7))]),i("details",f,[i("summary",null,[s[21]||(s[21]=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[22]||(s[22]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[23]||(s[23]=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

Returns

BitMatrix indicating locations within desired thresholds

source

`,7))]),i("details",F,[i("summary",null,[s[24]||(s[24]=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[25]||(s[25]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[26]||(s[26]=n(`
julia
assess_reef_site(
+    rel_pix::DataFrame,
+    geom::GI.Wrappers.Polygon,
+    max_count::Float64,
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat;
+    degree_step::Float64=15.0,
+    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

Returns

source

`,7))]),i("details",b,[i("summary",null,[s[27]||(s[27]=i("a",{id:"ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon}",href:"#ReefGuideAPI.assess_reef_site-Tuple{Union{Rasters.Raster, Rasters.RasterStack}, GeoInterface.Wrappers.Polygon}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_reef_site")],-1)),s[28]||(s[28]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[29]||(s[29]=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

Returns

source

`,7))]),i("details",m,[i("summary",null,[s[30]||(s[30]=i("a",{id:"ReefGuideAPI.assess_region-NTuple{4, Any}",href:"#ReefGuideAPI.assess_region-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_region")],-1)),s[31]||(s[31]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[32]||(s[32]=n('
julia
assess_region(reg_assess_data, reg, qp, rtype)

Perform raster suitability assessment based on user defined criteria.

Arguments

Returns

GeoTiff file of surrounding hectare suitability (1-100%) based on the criteria bounds input by a user.

source

',7))]),i("details",C,[i("summary",null,[s[33]||(s[33]=i("a",{id:"ReefGuideAPI.assess_sites-Tuple{OrderedCollections.OrderedDict, String, String, Dict, Dict, Rasters.Raster}",href:"#ReefGuideAPI.assess_sites-Tuple{OrderedCollections.OrderedDict, String, String, Dict, Dict, Rasters.Raster}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.assess_sites")],-1)),s[34]||(s[34]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[35]||(s[35]=n(`
julia
assess_sites(
+    reg_assess_data::OrderedDict,
+    reg::String,
+    rtype::String,
+    pixel_criteria::Dict,
+    site_criteria::Dict,
+    assess_locs::Raster
+)

Arguments

Returns

GeoDataFrame of all potential sites

source

`,6))]),i("details",A,[i("summary",null,[s[36]||(s[36]=i("a",{id:"ReefGuideAPI.buffer_simplify-Tuple{DataFrames.DataFrame}",href:"#ReefGuideAPI.buffer_simplify-Tuple{DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.buffer_simplify")],-1)),s[37]||(s[37]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[38]||(s[38]=n(`
julia
buffer_simplify(
+    gdf::DataFrame;
+    number_verts::Int64=30,
+    buffer_dist_m::Int64=40
+)::Vector{GeoInterface.Wrappers.WrapperGeometry}

Simplify and buffer the polygons in a GeoDataFrame to account for uncertainty and inaccuracies in the reef outlines.

Arguments

Returns

Vector containing buffered and simplified reef polygons

source

`,7))]),i("details",_,[i("summary",null,[s[39]||(s[39]=i("a",{id:"ReefGuideAPI.cache_filename-Tuple{Dict, Dict, String, String}",href:"#ReefGuideAPI.cache_filename-Tuple{Dict, Dict, String, String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.cache_filename")],-1)),s[40]||(s[40]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[41]||(s[41]=n('
julia
cache_filename(qp::Dict, config::Dict, suffix::String, ext::String)

Generate a filename for a cache.

Arguments

source

',5))]),i("details",j,[i("summary",null,[s[42]||(s[42]=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[43]||(s[43]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[44]||(s[44]=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

Returns

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

source

`,7))]),i("details",R,[i("summary",null,[s[45]||(s[45]=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[46]||(s[46]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[47]||(s[47]=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",I,[i("summary",null,[s[48]||(s[48]=i("a",{id:"ReefGuideAPI.criteria_middleware-Tuple{Any}",href:"#ReefGuideAPI.criteria_middleware-Tuple{Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.criteria_middleware")],-1)),s[49]||(s[49]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[50]||(s[50]=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",D,[i("summary",null,[s[51]||(s[51]=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[52]||(s[52]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[53]||(s[53]=n('
julia
degrees_to_meters(x, lat)

Convert degrees to meters at target latitude.

source

',3))]),i("details",v,[i("summary",null,[s[54]||(s[54]=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[55]||(s[55]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[56]||(s[56]=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

Returns

source

`,8))]),i("details",T,[i("summary",null,[s[57]||(s[57]=i("a",{id:"ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, DataFrames.DataFrame, Any}",href:"#ReefGuideAPI.filter_distances-Tuple{Rasters.Raster, DataFrames.DataFrame, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_distances")],-1)),s[58]||(s[58]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[59]||(s[59]=n(`
julia
filter_distances(
+    target_rast::Raster,
+    gdf::DataFrame,
+    dist_nm
+)::Raster

Exclude pixels in target_rast that are beyond dist_nm (nautical miles) from a geometry in gdf. target_rast and gdf should be in the same CRS (EPSG:7844 / GDA2020 for GBR-reef-guidance-assessment).

Arguments

Returns

from a geometry centroid.

source

`,8))]),i("details",B,[i("summary",null,[s[60]||(s[60]=i("a",{id:"ReefGuideAPI.filter_far_polygons-Tuple{Any, GeometryBasics.Point, Float64, Union{Float64, Int64}}",href:"#ReefGuideAPI.filter_far_polygons-Tuple{Any, GeometryBasics.Point, Float64, Union{Float64, Int64}}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.filter_far_polygons")],-1)),s[61]||(s[61]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[62]||(s[62]=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",G,[i("summary",null,[s[63]||(s[63]=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[64]||(s[64]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[65]||(s[65]=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

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_edge_aligned_sites() (default=0.33).

source

',7))]),i("details",x,[i("summary",null,[s[66]||(s[66]=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[67]||(s[67]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[68]||(s[68]=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",P,[i("summary",null,[s[69]||(s[69]=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[70]||(s[70]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[71]||(s[71]=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

source

',5))]),i("details",M,[i("summary",null,[s[72]||(s[72]=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[73]||(s[73]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[74]||(s[74]=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

Arguments

Returns

Nothing

source

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

Helper method to retrieve points for a geometry.

source

',3))]),i("details",L,[i("summary",null,[s[78]||(s[78]=i("a",{id:"ReefGuideAPI.identify_edge_aligned_sites-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_edge_aligned_sites-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_edge_aligned_sites")],-1)),s[79]||(s[79]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[80]||(s[80]=n(`
julia
identify_edge_aligned_sites(
+    df::DataFrame,
+    search_pixels::DataFrame,
+    res::Float64,
+    gdf::DataFrame,
+    x_dist::Union{Int64,Float64},
+    y_dist::Union{Int64,Float64},
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
+    reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}},
+    region::String;
+    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

Returns

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

source

`,7))]),i("details",w,[i("summary",null,[s[81]||(s[81]=i("a",{id:"ReefGuideAPI.identify_edge_aligned_sites-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_edge_aligned_sites-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_edge_aligned_sites")],-1)),s[82]||(s[82]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[83]||(s[83]=n(`
julia
identify_edge_aligned_sites(
+    rst_stack::RasterStack,
+    search_pixels::DataFrame,
+    gdf::DataFrame,
+    x_dist::Union{Int64,Float64},
+    y_dist::Union{Int64,Float64},
+    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
+    region::String,
+    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

Returns

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

source

`,7))]),i("details",O,[i("summary",null,[s[84]||(s[84]=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[85]||(s[85]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[86]||(s[86]=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

Returns

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

source

',7))]),i("details",V,[i("summary",null,[s[87]||(s[87]=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[88]||(s[88]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[89]||(s[89]=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

Returns

Initial search box geometry.

source

`,7))]),i("details",q,[i("summary",null,[s[90]||(s[90]=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[91]||(s[91]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[92]||(s[92]=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

source

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

Create initial regional data store with data from reef_data_path, excluding geospatial data and save to reg_cache_fn path.

source

',3))]),i("details",z,[i("summary",null,[s[96]||(s[96]=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[97]||(s[97]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[98]||(s[98]=n(`
julia
line_angle(a::T, b::T)::Float64 where {T <: Vector{Tuple{Float64,Float64}}}

Calculate the angle between two lines.

Arguments

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",N,[i("summary",null,[s[99]||(s[99]=i("a",{id:"ReefGuideAPI.mask_region-NTuple{4, Any}",href:"#ReefGuideAPI.mask_region-NTuple{4, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.mask_region")],-1)),s[100]||(s[100]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[101]||(s[101]=n('
julia
mask_region(reg_assess_data, reg, qp, rtype)

Arguments

Returns

Raster of region with locations that meet criteria masked.

source

',6))]),i("details",W,[i("summary",null,[s[102]||(s[102]=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[103]||(s[103]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[104]||(s[104]=n('
julia
meters_to_degrees(x, lat)

Convert meters to degrees at target latitude.

source

',3))]),i("details",H,[i("summary",null,[s[105]||(s[105]=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[106]||(s[106]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[107]||(s[107]=n('
julia
move_geom(geom, new_centroid::Tuple)

Move a geom to a new centroid.

Arguments

source

',5))]),i("details",$,[i("summary",null,[s[108]||(s[108]=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[109]||(s[109]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[110]||(s[110]=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",Q,[i("summary",null,[s[111]||(s[111]=i("a",{id:"ReefGuideAPI.output_geojson-Tuple{String, DataFrames.DataFrame}",href:"#ReefGuideAPI.output_geojson-Tuple{String, DataFrames.DataFrame}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.output_geojson")],-1)),s[112]||(s[112]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[113]||(s[113]=n('
julia
output_geojson(destination_path::String, df::DataFrame)::Nothing

Writes out GeoJSON file to a target directory. Output file will be located at location: destination_path.

Arguments

source

',5))]),i("details",J,[i("summary",null,[s[114]||(s[114]=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[115]||(s[115]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[116]||(s[116]=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

Returns

Tuple of criteria names, lower bounds, upper bounds

source

',8))]),i("details",Z,[i("summary",null,[s[117]||(s[117]=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[118]||(s[118]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[119]||(s[119]=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",X,[i("summary",null,[s[120]||(s[120]=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[121]||(s[121]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[122]||(s[122]=n('
julia
port_buffer_mask(gdf::DataFrame, dist::Float64; unit::String="NM")

Create a masking buffer around indicated port locations.

Arguments

source

',5))]),i("details",K,[i("summary",null,[s[123]||(s[123]=i("a",{id:"ReefGuideAPI.proportion_suitable-Tuple{BitMatrix}",href:"#ReefGuideAPI.proportion_suitable-Tuple{BitMatrix}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.proportion_suitable")],-1)),s[124]||(s[124]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[125]||(s[125]=n('
julia
proportion_suitable(subsection::BitMatrix, square_offset::Tuple=(-4,5))::Matrix{Int16}

Calculate the the proportion of the subsection that is suitable for deployments. The subsection is the surrounding a rough hectare area centred on each cell of a raster marked as being suitable according to user-selected criteria.

Cells on the edges of a raster object are assessed using a smaller surrounding area, rather than shifting the window inward. In usual applications, there will be no target pixel close to the edge due to the use of buffer areas.

Arguments

Returns

Matrix of values 0 - 100 indicating the percentage of the area around the target pixel that meet suitability criteria.

source

',8))]),i("details",Y,[i("summary",null,[s[126]||(s[126]=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[127]||(s[127]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[128]||(s[128]=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",ss,[i("summary",null,[s[129]||(s[129]=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[130]||(s[130]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[131]||(s[131]=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",is,[i("summary",null,[s[132]||(s[132]=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[133]||(s[133]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[134]||(s[134]=i("p",null,"Rotate the polygon by the given angle about its center.",-1)),s[135]||(s[135]=i("p",null,[i("a",{href:"https://github.com/open-AIMS/ReefGuideAPI.jl/blob/39637e8d1926c44317ec99036d199c22251bfb19/src/site_assessment/geom_ops.jl#L47",target:"_blank",rel:"noreferrer"},"source")],-1))]),i("details",es,[i("summary",null,[s[136]||(s[136]=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[137]||(s[137]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[138]||(s[138]=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",as,[i("summary",null,[s[139]||(s[139]=i("a",{id:"ReefGuideAPI.threshold_mask-Tuple{Any, Symbol, Any}",href:"#ReefGuideAPI.threshold_mask-Tuple{Any, Symbol, Any}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.threshold_mask")],-1)),s[140]||(s[140]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[141]||(s[141]=n('
julia
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

Arguments

Returns

True/false mask indicating locations within desired thresholds.

source

',9))]),i("details",ts,[i("summary",null,[s[142]||(s[142]=i("a",{id:"ReefGuideAPI.tile_size-Tuple{Dict}",href:"#ReefGuideAPI.tile_size-Tuple{Dict}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.tile_size")],-1)),s[143]||(s[143]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[144]||(s[144]=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",ns,[i("summary",null,[s[145]||(s[145]=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[146]||(s[146]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[147]||(s[147]=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",ls,[i("summary",null,[s[148]||(s[148]=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[149]||(s[149]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[150]||(s[150]=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",ps,[i("summary",null,[s[151]||(s[151]=i("a",{id:"ReefGuideAPI.warmup_cache-Tuple{String}",href:"#ReefGuideAPI.warmup_cache-Tuple{String}"},[i("span",{class:"jlbinding"},"ReefGuideAPI.warmup_cache")],-1)),s[152]||(s[152]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[153]||(s[153]=n('
julia
warmup_cache(config_path::String)

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

source

',3))]),i("details",rs,[i("summary",null,[s[154]||(s[154]=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[155]||(s[155]=e()),t(a,{type:"info",class:"jlObjectType jlMethod",text:"Method"})]),s[156]||(s[156]=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 Es=l(h,[["render",os]]);export{ys as __pageData,Es as default}; diff --git a/dev/assets/api.md.Dxqu1QHi.js b/dev/assets/api.md.Dxqu1QHi.js deleted file mode 100644 index 26203f3..0000000 --- a/dev/assets/api.md.Dxqu1QHi.js +++ /dev/null @@ -1,72 +0,0 @@ -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

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

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,
-    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat;
-    degree_step::Float64=15.0,
-    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

Returns

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

Returns

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

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

Returns

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

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

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

Arguments

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,
-    gdf::DataFrame,
-    x_dist::Union{Int64,Float64},
-    y_dist::Union{Int64,Float64},
-    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
-    reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}},
-    region::String;
-    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

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,
-    x_dist::Union{Int64,Float64},
-    y_dist::Union{Int64,Float64},
-    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
-    region::String,
-    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

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

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

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

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

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

Arguments

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

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

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

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",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

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",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.Dxqu1QHi.lean.js b/dev/assets/api.md.Dxqu1QHi.lean.js deleted file mode 100644 index 26203f3..0000000 --- a/dev/assets/api.md.Dxqu1QHi.lean.js +++ /dev/null @@ -1,72 +0,0 @@ -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

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

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,
-    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat;
-    degree_step::Float64=15.0,
-    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

Returns

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

Returns

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

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

Returns

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

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

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

Arguments

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,
-    gdf::DataFrame,
-    x_dist::Union{Int64,Float64},
-    y_dist::Union{Int64,Float64},
-    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
-    reef_lines::Vector{Vector{GeometryBasics.Line{2,Float64}}},
-    region::String;
-    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

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,
-    x_dist::Union{Int64,Float64},
-    y_dist::Union{Int64,Float64},
-    target_crs::GeoFormatTypes.CoordinateReferenceSystemFormat,
-    region::String,
-    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

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

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

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

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

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

Arguments

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

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

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

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",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

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",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.XWT9iCUG.js b/dev/assets/app.BZelDUE4.js similarity index 90% rename from dev/assets/app.XWT9iCUG.js rename to dev/assets/app.BZelDUE4.js index c23b1e3..c7a4b8d 100644 --- a/dev/assets/app.XWT9iCUG.js +++ b/dev/assets/app.BZelDUE4.js @@ -1 +1 @@ -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}; +import{R as p}from"./chunks/theme.CqfubCF7.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.CX_bWI7S.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.DkOCJlzL.js b/dev/assets/chunks/@localSearchIndexroot.DkOCJlzL.js deleted file mode 100644 index 95106c3..0000000 --- a/dev/assets/chunks/@localSearchIndexroot.DkOCJlzL.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,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/@localSearchIndexroot.jEljhpSH.js b/dev/assets/chunks/@localSearchIndexroot.jEljhpSH.js new file mode 100644 index 0000000..d3826a6 --- /dev/null +++ b/dev/assets/chunks/@localSearchIndexroot.jEljhpSH.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,750],"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,95],"18":[4,8,51],"19":[2,1,8]},"averageFieldLength":[4.2,2.85,74.55],"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}}],["juliathreshold",{"2":{"0":1}}],["juliasetup",{"2":{"0":1}}],["juliarotate",{"2":{"0":1}}],["juliaremove",{"2":{"0":1}}],["juliaproportion",{"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}}],["juliamask",{"2":{"0":1}}],["julialine",{"2":{"0":2}}],["juliainitialize",{"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":4}}],["juliadegrees",{"2":{"0":1}}],["juliacriteria",{"2":{"0":1}}],["juliacreate",{"2":{"0":1}}],["juliaclosest",{"2":{"0":1}}],["juliacache",{"2":{"0":1}}],["juliabuffer",{"2":{"0":1}}],["juliaassess",{"2":{"0":4}}],["juliaapply",{"2":{"0":2}}],["juliaadjusted",{"2":{"0":1}}],["julia",{"2":{"0":5,"1":1,"7":2,"9":1,"12":1,"15":4}}],["+",{"2":{"0":1}}],["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":2}}],["4",{"2":{"0":3,"12":1,"16":1}}],["40",{"2":{"0":2,"13":1,"14":1}}],["40m",{"2":{"0":1}}],["5",{"2":{"0":4}}],["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}}],["hectare",{"2":{"0":3}}],["https",{"2":{"0":1,"9":1,"10":3}}],["have",{"2":{"2":2,"17":1}}],["has",{"2":{"1":1}}],["hash",{"2":{"0":1}}],["hardcoded",{"2":{"0":1}}],["handle",{"2":{"0":1}}],["qc",{"2":{"0":1}}],["quickstart",{"0":{"12":1},"2":{"15":1}}],["queries",{"2":{"0":1}}],["query",{"2":{"0":7}}],["quot",{"2":{"0":10,"17":4}}],["quality",{"2":{"0":1}}],["qp",{"2":{"0":8}}],["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}}],["30",{"2":{"0":1}}],["39",{"2":{"0":3}}],["33",{"2":{"0":3}}],["139",{"2":{"14":1}}],["127",{"2":{"13":1,"14":1}}],["1a",{"2":{"9":1}}],["10",{"2":{"12":1,"16":1}}],["10m²",{"2":{"0":1}}],["100",{"2":{"0":2}}],["15",{"2":{"0":1,"12":1,"16":1}}],["1",{"2":{"0":3,"9":1,"12":1,"13":1,"14":1}}],["0",{"2":{"0":43,"13":7,"14":9}}],["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":4}}],["unsuitable",{"2":{"18":1}}],["unit",{"2":{"0":3}}],["units",{"2":{"0":1}}],["union",{"2":{"0":10}}],["uncertainty",{"2":{"0":1}}],["usual",{"2":{"0":1,"9":1}}],["use",{"2":{"0":6,"7":1,"9":2,"17":2}}],["used",{"2":{"0":9,"17":1,"18":1}}],["user",{"2":{"0":7,"18":1}}],["using",{"0":{"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":5,"18":1}}],["vs",{"2":{"15":1}}],["view",{"2":{"1":1}}],["viewing",{"2":{"0":1}}],["via",{"2":{"0":1}}],["v",{"2":{"0":3,"5":1,"7":1}}],["versions",{"2":{"1":1}}],["vertex",{"2":{"0":1,"17":2}}],["vertical",{"2":{"0":2}}],["vertices",{"2":{"0":3}}],["verts",{"2":{"0":2}}],["vector",{"2":{"0":30,"17":1}}],["variables",{"2":{"0":2}}],["variable",{"2":{"0":1}}],["vary",{"2":{"0":2}}],["val",{"2":{"0":1}}],["values",{"2":{"0":3,"12":1,"16":1}}],["value",{"2":{"0":2}}],["validate",{"2":{"10":1}}],["valid",{"2":{"0":6,"10":1,"18":2}}],["block",{"2":{"9":1}}],["bash$",{"2":{"15":1}}],["bashjulia",{"2":{"12":1}}],["bashdocker",{"2":{"3":1,"4":1,"5":1,"6":1,"7":1}}],["based",{"2":{"0":3,"18":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":2,"17":1}}],["buffering",{"2":{"0":1}}],["buffer",{"2":{"0":18}}],["b",{"2":{"0":2}}],["bitvector",{"2":{"0":1}}],["bitmatrix",{"2":{"0":2}}],["bbox",{"2":{"0":2}}],["boolean",{"2":{"0":4}}],["bool",{"2":{"0":1,"10":1,"17":1}}],["bottom",{"2":{"0":2}}],["bound",{"2":{"0":3}}],["bounding",{"2":{"0":2}}],["bounds",{"2":{"0":8}}],["box",{"2":{"0":26}}],["by",{"2":{"0":7,"9":1,"17":2}}],["been",{"2":{"17":1}}],["best",{"2":{"12":1}}],["bearer",{"2":{"10":1}}],["because",{"2":{"0":1}}],["begin",{"2":{"0":1}}],["beyond",{"2":{"0":1}}],["before",{"2":{"0":1,"17":1}}],["being",{"2":{"0":3}}],["below",{"2":{"0":1,"2":1,"15":1}}],["between",{"2":{"0":6,"15":1}}],["be",{"2":{"0":9,"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":4}}],["preferably",{"2":{"12":1,"16":1}}],["prepped",{"2":{"9":2}}],["prepared",{"2":{"0":1}}],["pre",{"2":{"0":1}}],["p",{"2":{"0":2,"5":1}}],["pay",{"2":{"10":1}}],["page",{"2":{"1":1,"12":1}}],["packages",{"2":{"1":1}}],["package",{"2":{"1":2,"2":1}}],["pair",{"2":{"0":1}}],["pass",{"2":{"0":1}}],["parquet",{"0":{"18":1},"2":{"18":1}}],["parallel",{"2":{"12":1}}],["parameters",{"2":{"0":6}}],["parsed",{"2":{"0":1}}],["parse",{"2":{"0":2}}],["parses",{"2":{"0":1}}],["parent",{"2":{"0":1}}],["paths",{"2":{"0":1}}],["path",{"2":{"0":13,"9":1}}],["percentage",{"2":{"0":1}}],["perform",{"2":{"0":6}}],["performance",{"0":{"16":1},"2":{"0":1,"12":1}}],["per",{"2":{"0":6}}],["possibly",{"2":{"17":1}}],["positions",{"2":{"0":3}}],["positive",{"2":{"0":1}}],["port",{"2":{"0":4}}],["potential",{"2":{"0":3,"17":1}}],["point",{"2":{"0":11}}],["points",{"2":{"0":6}}],["polygonal",{"2":{"0":1}}],["polygons",{"2":{"0":13,"17":4}}],["polygon",{"2":{"0":25,"17":2}}],["pixel",{"2":{"0":32,"17":1}}],["pixels",{"2":{"0":31,"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":4}}],["exactly",{"2":{"10":1}}],["examples",{"2":{"0":1}}],["example",{"2":{"0":1,"13":1,"14":1}}],["expected",{"2":{"10":1}}],["expect",{"2":{"10":1}}],["excluding",{"2":{"0":1}}],["excludes",{"2":{"2":1}}],["exclude",{"2":{"0":2}}],["excluded",{"2":{"0":1}}],["extent",{"2":{"0":2}}],["extension",{"2":{"0":1}}],["extract",{"2":{"0":2}}],["ext",{"2":{"0":2}}],["exists",{"2":{"0":3}}],["edges",{"2":{"0":1,"17":1}}],["edge",{"0":{"17":1},"1":{"18":1},"2":{"0":24,"17":3,"18":1}}],["each",{"2":{"0":20}}],["east",{"2":{"0":1}}],["e",{"2":{"0":4,"7":1,"15":1,"17":1,"18":1}}],["nautical",{"2":{"0":3}}],["named",{"2":{"2":1,"9":1}}],["namedtuple",{"2":{"0":2}}],["name",{"2":{"0":6,"17":1}}],["names=depth",{"2":{"0":1}}],["names",{"2":{"0":3}}],["nm",{"2":{"0":5}}],["number",{"2":{"0":10,"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}}],["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":3}}],["none",{"2":{"0":1}}],["no",{"2":{"0":2}}],["north",{"2":{"0":1}}],["rm",{"2":{"7":1}}],["root",{"2":{"15":2}}],["route",{"2":{"11":1}}],["rough",{"2":{"0":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}}],["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":13}}],["right",{"2":{"0":2}}],["range",{"2":{"12":1,"16":1}}],["rast",{"2":{"0":7}}],["rasters",{"2":{"0":2}}],["rasterstack",{"2":{"0":8}}],["raster",{"2":{"0":36,"17":3}}],["rather",{"2":{"0":4,"17":1}}],["rtype=slopes",{"2":{"14":1}}],["rtype",{"2":{"0":12}}],["rst",{"2":{"0":10}}],["revise",{"2":{"15":1}}],["ready",{"2":{"7":1}}],["reaching",{"2":{"0":1}}],["repl",{"2":{"15":1}}],["repository",{"2":{"1":1}}],["representation",{"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":4,"2":2,"17":1}}],["request",{"2":{"0":2}}],["requested",{"2":{"0":5,"12":1,"16":1}}],["restart",{"2":{"15":1}}],["resolvable",{"2":{"10":1}}],["resolves",{"2":{"0":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":52,"1":2,"2":1,"7":3,"12":3}}],["reeftype",{"2":{"0":1}}],["reefs",{"2":{"0":2}}],["reef",{"0":{"17":1},"1":{"18":1},"2":{"0":43,"9":1,"17":7,"19":1}}],["region=cairns",{"2":{"14":1}}],["regional",{"2":{"0":10,"9":2}}],["regionalcriteria",{"2":{"0":4}}],["region",{"2":{"0":26,"17":1}}],["reg",{"2":{"0":20}}],["retaining",{"2":{"0":1}}],["return",{"2":{"0":2,"10":1,"17":1}}],["returned",{"2":{"0":2}}],["returns",{"2":{"0":33,"12":1,"16":1}}],["retrieved",{"2":{"10":1}}],["retrieve",{"2":{"0":5}}],["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":{"0":1,"2":1}}],["df",{"2":{"0":6}}],["development",{"0":{"15":1}}],["dev",{"2":{"12":1,"15":3}}],["debug",{"2":{"9":2,"12":2}}],["deployments",{"2":{"0":1}}],["depth=",{"2":{"0":1,"13":1,"14":1}}],["deg",{"2":{"0":1}}],["degrees",{"2":{"0":11}}],["degree",{"2":{"0":11}}],["destination",{"2":{"0":3}}],["desired",{"2":{"0":3}}],["defaults",{"2":{"0":1,"9":2}}],["default=0",{"2":{"0":1}}],["default",{"2":{"0":9,"15":1,"18":1}}],["defined",{"2":{"0":3,"9":1}}],["displays",{"2":{"9":1,"12":1}}],["disables",{"2":{"9":1}}],["distances",{"2":{"0":4}}],["distance",{"2":{"0":10}}],["dist",{"2":{"0":30}}],["dir",{"2":{"9":3}}],["direction",{"2":{"0":2}}],["directory",{"2":{"0":2,"2":1,"15":1}}],["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":2}}],["dict",{"2":{"0":12,"18":1}}],["datasets>",{"2":{"9":1}}],["dataset",{"2":{"9":1}}],["dataframe",{"2":{"0":37}}],["data",{"0":{"2":1},"2":{"0":42,"2":4,"5":2,"7":3,"9":4,"15":2}}],["false",{"2":{"0":1,"9":1,"10":1}}],["farnorthern",{"2":{"0":1}}],["far",{"2":{"0":2}}],["fn",{"2":{"0":4}}],["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":59,"7":1,"10":1,"12":2,"17":1,"18":2,"19":1}}],["first",{"2":{"10":1,"18":1}}],["findall",{"2":{"17":1}}],["find",{"2":{"0":4}}],["filtered",{"2":{"0":3,"18":1}}],["filtering",{"2":{"0":3}}],["filter",{"2":{"0":10}}],["files",{"0":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1},"2":{"0":1,"2":3,"9":1}}],["filename",{"2":{"0":4}}],["file",{"2":{"0":12,"2":2,"9":3,"15":2}}],["further",{"2":{"0":1}}],["full",{"2":{"0":1}}],["function",{"2":{"0":10}}],["from",{"0":{"3":1,"4":1},"2":{"0":23,"12":1,"16":1,"17":1}}],["flag",{"2":{"0":2}}],["flats",{"2":{"0":8}}],["float64=0",{"2":{"0":4}}],["float64=15",{"2":{"0":4}}],["float64",{"2":{"0":43,"18":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}}],["moving",{"2":{"0":1}}],["move",{"2":{"0":3}}],["most",{"2":{"0":2}}],["miles",{"2":{"0":3}}],["middleware",{"2":{"0":3}}],["min",{"2":{"0":4}}],["m",{"2":{"0":2}}],["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":10}}],["met",{"2":{"0":1}}],["meet",{"2":{"0":4}}],["main",{"2":{"12":1}}],["maintaining",{"2":{"0":1}}],["many",{"2":{"12":1,"16":1}}],["management",{"2":{"0":3,"17":1}}],["marked",{"2":{"0":1}}],["make",{"2":{"0":1}}],["matching",{"2":{"17":1}}],["match",{"2":{"0":2,"10":1}}],["matrix",{"2":{"0":5}}],["mackay",{"2":{"0":1}}],["map",{"2":{"0":4}}],["mapping",{"2":{"0":1}}],["masks",{"2":{"0":2}}],["masking",{"2":{"0":2,"18":1}}],["masked",{"2":{"0":2,"17":1}}],["mask",{"2":{"0":14}}],["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}}],["window",{"2":{"0":2}}],["will",{"2":{"0":3,"1":1,"7":1,"12":2,"15":1,"16":1}}],["without",{"2":{"1":1}}],["within",{"2":{"0":8,"18":1}}],["with",{"0":{"5":1,"6":1,"7":1},"2":{"0":17,"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":7,"12":2,"16":2}}],["wrappergeometry",{"2":{"0":1}}],["wrappers",{"2":{"0":8}}],["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}}],["options",{"2":{"0":1}}],["open",{"2":{"9":1}}],["opperating",{"2":{"0":1}}],["overlapping",{"2":{"0":1}}],["object",{"2":{"0":4}}],["objects",{"2":{"0":1}}],["obtain",{"2":{"0":3}}],["ones",{"2":{"0":2}}],["one",{"2":{"0":5,"12":1}}],["only",{"2":{"0":5,"17":1}}],["on",{"2":{"0":7,"1":1,"18":1}}],["order",{"2":{"0":1}}],["ordereddict",{"2":{"0":2}}],["or",{"2":{"0":12,"17":2}}],["original",{"2":{"0":1}}],["orig",{"2":{"0":1}}],["outline",{"2":{"0":3}}],["outlines",{"2":{"0":8}}],["output",{"2":{"0":4}}],["outside",{"2":{"0":2}}],["out",{"2":{"0":9,"12":1,"16":1}}],["offset",{"2":{"0":3}}],["of",{"2":{"0":82,"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":4,"12":1}}],["issuer",{"2":{"10":4}}],["iss",{"2":{"10":2}}],["is",{"2":{"0":21,"2":2,"7":1,"9":1,"11":1,"15":1,"17":1}}],["inaccurate",{"2":{"17":1}}],["inaccuracies",{"2":{"0":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}}],["inward",{"2":{"0":1}}],["innacuracies",{"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":6,"9":1}}],["index",{"2":{"0":1}}],["initially",{"2":{"15":1}}],["initialize",{"2":{"0":1,"9":1}}],["initial",{"2":{"0":13}}],["input",{"2":{"0":10,"2":1}}],["in",{"2":{"0":46,"2":4,"9":2,"10":1,"12":1,"15":2,"17":1,"18":1}}],["into",{"2":{"17":1}}],["int16",{"2":{"0":1}}],["intended",{"2":{"0":5}}],["interactive",{"0":{"7":1},"2":{"7":1,"12":1}}],["interest",{"2":{"0":1}}],["intersect",{"2":{"0":2}}],["interpolation",{"2":{"0":1}}],["int",{"2":{"0":7}}],["int64=40",{"2":{"0":1}}],["int64=30",{"2":{"0":1}}],["int64=1",{"2":{"0":1}}],["int64=2",{"2":{"0":3}}],["int64",{"2":{"0":15}}],["zeros",{"2":{"0":2}}],["zero",{"2":{"0":4}}],["zone",{"2":{"0":1}}],["zoom",{"2":{"0":2}}],["z",{"2":{"0":4}}],["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":22}}],["go",{"2":{"17":1}}],["greater",{"2":{"0":1}}],["gt",{"2":{"0":1,"10":1}}],["guidance",{"2":{"0":1,"9":1}}],["gbrmpa",{"2":{"0":1,"17":1}}],["gbr",{"2":{"0":1,"9":1}}],["gdal",{"2":{"0":3}}],["gda2020",{"2":{"0":2}}],["gdf",{"2":{"0":21}}],["generation",{"0":{"13":1}}],["generating",{"2":{"0":2}}],["generate",{"2":{"0":4}}],["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":5}}],["geospatial",{"2":{"0":1}}],["geointerface",{"2":{"0":1}}],["geodataframe",{"2":{"0":7,"18":2}}],["geotiff",{"2":{"0":2}}],["geotiffs>",{"2":{"9":1}}],["geotiffs",{"2":{"0":1}}],["geoformattypes",{"2":{"0":7}}],["geometries",{"2":{"17":1}}],["geometrybasics",{"2":{"0":7}}],["geometry",{"2":{"0":16,"18":3}}],["geom",{"2":{"0":20}}],["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":3}}],["account",{"2":{"0":3}}],["able",{"2":{"0":1,"1":1}}],["about",{"2":{"0":1}}],["abs",{"2":{"0":1}}],["after",{"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}}],["aligned",{"2":{"0":6,"17":1,"18":1}}],["align",{"2":{"0":3,"17":1}}],["aligns",{"2":{"0":1}}],["all",{"2":{"0":4}}],["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":42,"1":1,"2":1,"7":1,"9":1,"10":2,"15":2,"17":2,"18":3}}],["assumes",{"2":{"15":1}}],["assumed",{"2":{"2":1}}],["assuming",{"2":{"0":1,"15":1}}],["associated",{"2":{"1":1}}],["assessed",{"2":{"0":3}}],["assesses",{"2":{"0":1}}],["assessing",{"2":{"0":1}}],["assess",{"2":{"0":23,"13":1}}],["assessments",{"2":{"19":1}}],["assessment",{"0":{"18":1},"2":{"0":11,"9":1}}],["as",{"2":{"0":6,"2":1,"17":1,"18":2}}],["app",{"2":{"0":1}}],["applications",{"2":{"0":2}}],["applied",{"2":{"0":6}}],["applying",{"2":{"0":1}}],["apply",{"2":{"0":12}}],["approach",{"2":{"0":1}}],["appear",{"2":{"0":1}}],["api",{"0":{"0":1},"2":{"10":2,"19":1}}],["argument",{"2":{"0":1}}],["arguments",{"2":{"0":31}}],["around",{"2":{"0":10}}],["are",{"2":{"0":14,"9":1,"12":1,"15":1}}],["areas",{"2":{"0":2}}],["area",{"2":{"0":7,"17":1}}],["a",{"2":{"0":56,"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":8}}],["two",{"2":{"0":2}}],["true",{"2":{"0":3,"10":2}}],["translates",{"2":{"0":1}}],["tmp",{"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}}],["take",{"2":{"0":1}}],["targetted",{"2":{"0":1}}],["target",{"2":{"0":35,"3":1,"17":2}}],["table",{"2":{"0":3}}],["thread",{"2":{"12":1}}],["threads=4",{"2":{"12":1}}],["threads",{"2":{"0":3,"9":2,"12":4,"16":3}}],["threshold",{"2":{"0":9}}],["thresholds",{"2":{"0":17,"18":2}}],["than",{"2":{"0":5,"17":1}}],["that",{"2":{"0":23,"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}}],["there",{"2":{"0":1}}],["their",{"2":{"0":3,"17":1}}],["the",{"2":{"0":110,"1":5,"2":6,"9":5,"10":9,"12":2,"15":10,"16":1,"17":4,"18":4}}],["tuple=",{"2":{"0":1}}],["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":101,"1":2,"2":2,"9":7,"10":4,"12":5,"15":7,"16":4,"17":5,"18":1}}],["launches",{"2":{"15":1}}],["launch",{"0":{"5":1,"6":1},"2":{"2":1}}],["layer",{"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}}],["lb",{"2":{"0":5}}],["lbs",{"2":{"0":1}}],["lb=",{"2":{"0":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}}],["loaded",{"2":{"0":1,"15":1,"18":1}}],["load",{"2":{"0":1}}],["low",{"2":{"0":1}}],["lower",{"2":{"0":4}}],["locally",{"2":{"2":1,"12":1,"16":1}}],["local",{"2":{"1":1}}],["located",{"2":{"0":1}}],["locations",{"2":{"0":10}}],["location",{"2":{"0":4,"9":3}}],["locs",{"2":{"0":2}}],["lookup",{"2":{"0":11}}],["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}}],["slippy",{"0":{"14":1}}],["slope=0",{"2":{"0":1,"13":1,"14":1}}],["slopes",{"2":{"0":7,"13":1}}],["slope",{"2":{"0":2}}],["script",{"2":{"9":1}}],["scoring",{"2":{"0":6}}],["scores",{"2":{"0":4}}],["score",{"2":{"0":7}}],["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}}],["specific",{"2":{"0":1}}],["specified",{"2":{"0":3,"17":2,"18":1}}],["shell",{"0":{"7":1},"2":{"7":1}}],["shifting",{"2":{"0":1}}],["should",{"2":{"0":3,"9":1,"10":2,"12":1,"16":1,"17":4,"18":1}}],["short",{"2":{"0":1}}],["square",{"2":{"0":3}}],["sandbox",{"2":{"15":8}}],["save",{"2":{"0":1,"15":1}}],["same",{"2":{"0":2,"18":1}}],["skip",{"2":{"0":1}}],["s",{"2":{"0":2}}],["system",{"2":{"0":1}}],["symbol",{"2":{"0":5}}],["supporting",{"2":{"19":1}}],["subsection",{"2":{"0":3}}],["suffix",{"2":{"0":3}}],["suitabiltiy",{"2":{"0":1}}],["suitability",{"2":{"0":9,"19":1}}],["suitable",{"2":{"0":10}}],["surrounding",{"2":{"0":3}}],["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}}],["selected",{"2":{"0":1}}],["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}}],["simple",{"0":{"14":1},"2":{"0":1,"12":1}}],["simplified",{"2":{"0":1,"17":3}}],["simplify",{"2":{"0":4,"17":1}}],["similar",{"2":{"0":1}}],["side",{"2":{"0":15}}],["sites",{"2":{"0":17,"17":2,"18":1}}],["site",{"0":{"17":1},"1":{"18":1},"2":{"0":16}}],["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":52}}],["store",{"2":{"0":1}}],["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":16}}],["smaller",{"2":{"0":1}}],["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}}],["close",{"2":{"0":1}}],["closest",{"2":{"0":5,"17":1}}],["clockwise",{"2":{"0":6}}],["cells",{"2":{"0":1}}],["cell",{"2":{"0":1}}],["centred",{"2":{"0":1}}],["centroid",{"2":{"0":5}}],["center",{"2":{"0":4}}],["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}}],["creating",{"2":{"9":1}}],["created",{"2":{"0":1,"9":1}}],["creates",{"2":{"0":1}}],["create",{"2":{"0":5,"15":2}}],["crit",{"2":{"0":3}}],["criteriabounds",{"2":{"0":4}}],["criteria",{"2":{"0":54,"18":1}}],["crs",{"2":{"0":17}}],["cartesianindices",{"2":{"17":1}}],["caching",{"2":{"9":1}}],["caches",{"2":{"15":1}}],["cache",{"2":{"0":15,"9":4}}],["called",{"2":{"2":1}}],["calculate",{"2":{"0":2}}],["calculated",{"2":{"0":1}}],["capricorn",{"2":{"0":1}}],["cairns",{"2":{"0":3,"13":1}}],["can",{"2":{"0":2,"1":1,"10":2,"17":1}}],["category",{"2":{"0":1}}],["col",{"2":{"18":1}}],["columns",{"2":{"0":1,"18":1}}],["column",{"2":{"0":4,"18":2}}],["code",{"2":{"15":1}}],["codehttp",{"2":{"13":1,"14":1}}],["copy",{"2":{"15":1}}],["com",{"2":{"9":1,"10":2}}],["commands",{"2":{"2":1}}],["common",{"2":{"0":1}}],["compose",{"0":{"4":1,"6":1},"2":{"4":1,"6":1}}],["compiled",{"2":{"7":1}}],["compile",{"2":{"1":1}}],["comparison",{"2":{"0":1}}],["cooktown",{"2":{"0":3,"13":1,"14":1}}],["coordinatereferencesystemformat",{"2":{"0":5}}],["coordinate",{"2":{"0":3}}],["coordinates",{"2":{"0":10,"18":1}}],["count",{"2":{"0":2}}],["convention",{"2":{"9":1}}],["converted",{"2":{"17":1}}],["convert",{"2":{"0":2}}],["constraint",{"2":{"0":1}}],["constraints",{"2":{"0":1}}],["consideration",{"2":{"0":1}}],["contains",{"2":{"0":1}}],["containing",{"2":{"0":26}}],["controls",{"2":{"12":1,"16":1}}],["control",{"2":{"0":1}}],["configured",{"2":{"0":2,"10":1,"12":1,"15":1,"16":1}}],["configuration",{"0":{"10":1},"1":{"11":1},"2":{"0":2}}],["config",{"2":{"0":9,"2":3,"7":1,"9":2,"10":1,"12":2,"15":1,"16":1}}],["cogs",{"2":{"0":1,"9":1,"12":1,"16":1}}],["cog",{"0":{"13":1},"2":{"0":3,"9":1,"12":1,"16":1}}],["corner",{"2":{"0":2}}],["corresponding",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/dev/assets/chunks/VPLocalSearchBox.lx_FSht0.js b/dev/assets/chunks/VPLocalSearchBox.DG3t9BP7.js similarity index 99% rename from dev/assets/chunks/VPLocalSearchBox.lx_FSht0.js rename to dev/assets/chunks/VPLocalSearchBox.DG3t9BP7.js index 37e18ac..42b861d 100644 --- a/dev/assets/chunks/VPLocalSearchBox.lx_FSht0.js +++ b/dev/assets/chunks/VPLocalSearchBox.DG3t9BP7.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.DT0TDSCa.js";import{u as ts,c as ss}from"./theme.Db56iT4S.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.DkOCJlzL.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.CX_bWI7S.js";import{u as ts,c as ss}from"./theme.CqfubCF7.js";const ns={root:()=>Ot(()=>import("./@localSearchIndexroot.jEljhpSH.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.DT0TDSCa.js b/dev/assets/chunks/framework.CX_bWI7S.js similarity index 62% rename from dev/assets/chunks/framework.DT0TDSCa.js rename to dev/assets/chunks/framework.CX_bWI7S.js index b9dd16e..47be1a3 100644 --- a/dev/assets/chunks/framework.DT0TDSCa.js +++ b/dev/assets/chunks/framework.CX_bWI7S.js @@ -2,17 +2,17 @@ * @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};/** +**//*! #__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=[],Be=()=>{},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=>$n(e)==="[object Map]",fi=e=>$n(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,$n=e=>di.call(e),Qo=e=>$n(e).slice(8,-1),hi=e=>$n(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"),Dn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Zo=/-(\w)/g,Ie=Dn(e=>e.replace(Zo,(t,n)=>n?n.toUpperCase():"")),el=/\B([A-Z])/g,rt=Dn(e=>e.replace(el,"-$1").toLowerCase()),jn=Dn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Sn=Dn(e=>e?`on${jn(e)}`:""),tt=(e,t)=>!Object.is(e,t),En=(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[ts(s,i)+" =>"]=r,n),{})}:fi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ts(n))}:st(t)?ts(t):ne(t)&&!K(t)&&!hi(t)?String(t):t,ts=(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}/** +**/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 Vn{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 On=new WeakMap,ht=Symbol(""),xs=Symbol(""),qt=Symbol("");function ve(e,t,n){if(Ne&&te){let s=On.get(e);s||On.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Vn),r.map=s,r.key=n),r.track()}}function Ge(e,t,n,s,r,i){const o=On.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=On.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 Un(e){return ve(e=z(e),"iterate",qt),e}const pl={__proto__:null,[Symbol.iterator](){return ss(this,Symbol.iterator,me)},concat(...e){return _t(this).concat(...e.map(t=>K(t)?_t(t):t))},entries(){return ss(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 rs(this,"includes",e)},indexOf(...e){return rs(this,"indexOf",e)},join(e){return _t(this).join(e)},lastIndexOf(...e){return rs(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 ss(this,"values",me)}};function ss(e,t,n){const s=Un(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=Un(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=Un(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 rs(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?Wn(l):kn(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,Bn=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}=Bn(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 Bn(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}=Bn(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}=Bn(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 kn(e){return vt(e)?e:Gs(e,!1,bl,Al,Pi)}function Ll(e){return Gs(e,!1,wl,Rl,Ii)}function Wn(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 xn(e){return!J(e,"__v_skip")&&Object.isExtensible(e)&&pi(e,"__v_skip",!0),e}const me=e=>ne(e)?kn(e):e,Xs=e=>ne(e)?Wn(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 Vn,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 Vn,{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 Vn(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={},Mn=new WeakMap;let ut;function Wl(e,t=!1,n=ut){if(n){let s=Mn.get(n);s||Mn.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,b,S=!1,_=!1;if(ae(e)?(h=()=>e.value,S=Pe(e)):pt(e)?(h=()=>f(e),S=!0):K(e)?(_=!0,S=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,[b]):e(b)}finally{ut=m}}:h=Be,t&&r){const m=h,M=r===!0?1/0:r;h=()=>qe(m(),M)}const k=bi(),N=()=>{a.stop(),k&&Ds(k.effects,a)};if(i&&t){const m=t;t=(...M)=>{m(...M),N()}}let j=_?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,j[$])):tt(M,j))){g&&g();const F=ut;ut=a;try{const $=[M,j===hn?void 0:_&&j[0]===hn?[]:j,b];c?c(t,3,$):t(...$),j=M}finally{ut=F}}}else a.run()};return l&&l(p),a=new _i(h),a.scheduler=o?()=>o(p,!1):p,b=m=>Wl(m,!1,a),g=a.onStop=()=>{const m=Mn.get(a);if(m){if(c)c(m,4);else for(const M of m)M();Mn.delete(a)}},t?s?p(!0):j=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";/** +**/function en(e,t,n,s){try{return s?e(...s):e()}catch(r){tn(r,t,n)}}function He(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(){Pn||(Pn=$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=Ve+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(Ve=0;Ve{s._d&&Lr(-1);const i=Ln(t);let o;try{o=e(...r)}finally{Ln(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=Jn(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:b,querySelector:S,createText:_,createComment:k}}=f,N=Vt(t.props);let{shapeFlag:j,children:p,dynamicChildren:m}=t;if(e==null){const M=t.el=_(""),F=t.anchor=_("");b(M,n,s),b(F,n,s);const $=(R,v)=>{j&16&&(r&&r.isCE&&(r.ce._teleportTarget=R),a(p,R,v,r,i,o,l,c))},V=()=>{const R=t.target=Ts(t.props,S),v=ki(R,t,_,b);R&&(o!=="svg"&&_r(R)?o="svg":o!=="mathml"&&wr(R)&&(o="mathml"),N||($(R,v),Tn(t)))};N&&($(n,F),Tn(t)),zl(t.props)?Ee(V,i):V()}else{t.el=e.el,t.targetStart=e.targetStart;const M=t.anchor=e.anchor,F=t.target=e.target,$=t.targetAnchor=e.targetAnchor,V=Vt(e.props),R=V?n:F,v=V?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,v,r,i,o,l,!1),N)V?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,S);L&&pn(t,L,null,f,0)}else V&&pn(t,F,$,f,1);Tn(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 b=i||!Vt(g);for(let S=0;S{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=zn(),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 is(i);const c=Sr(i);if(!c)return is(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},is(i);l==="in-out"&&c.type!==ye&&(g.delayLeave=(b,S,_)=>{const k=Gi(s,h);k[String(h.key)]=h,b[Ze]=()=>{S(),b[Ze]=void 0,delete f.delayedLeave},f.delayedLeave=_})}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:b,onAfterLeave:S,onLeaveCancelled:_,onBeforeAppear:k,onAppear:N,onAfterAppear:j,onAppearCancelled:p}=t,m=String(e.key),M=Gi(n,e),F=(R,v)=>{R&&He(R,s,9,v)},$=(R,v)=>{const L=v[1];F(R,v),K(R)?R.every(x=>x.length<=1)&&L():R.length<=1&&L()},V={mode:o,persisted:l,beforeEnter(R){let v=c;if(!n.isMounted)if(i)v=k||c;else return;R[Ze]&&R[Ze](!0);const L=M[m];L&&dt(e,L)&&L.el[Ze]&&L.el[Ze](),F(v,[R])},enter(R){let v=f,L=a,x=h;if(!n.isMounted)if(i)v=N||f,L=j||a,x=p||h;else return;let W=!1;const se=R[gn]=ce=>{W||(W=!0,ce?F(x,[R]):F(L,[R]),V.delayedLeave&&V.delayedLeave(),R[gn]=void 0)};v?$(v,[R,se]):se()},leave(R,v){const L=String(e.key);if(R[gn]&&R[gn](!0),n.isUnmounting)return v();F(g,[R]);let x=!1;const W=R[Ze]=se=>{x||(x=!0,v(),se?F(_,[R]):F(S,[R]),R[Ze]=void 0,M[L]===e&&delete M[L])};M[L]=e,b?$(b,[R,W]):W()},clone(R){const v=Cs(R,t,n,s,r);return r&&r(v),v}};return V}function is(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;iNn(S,t&&(K(t)?t[_]:t),n,s,r));return}if(gt(s)&&!r)return;const i=s.shapeFlag&4?Jn(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),b=h===Z?()=>!1:S=>J(g,S);if(f!=null&&f!==c&&(re(f)?(a[f]=null,b(f)&&(h[f]=null)):ae(f)&&(f.value=null)),q(c))en(c,l,12,[o,a]);else{const S=re(c),_=ae(c);if(S||_){const k=()=>{if(e.f){const N=S?b(c)?h[c]:a[c]:c.value;r?K(N)&&Ds(N,i):K(N)?N.includes(i)||N.push(i):S?(a[c]=[i],b(c)&&(h[c]=a[c])):(c.value=[i],e.k&&(a[e.k]=c.value))}else S?(a[c]=o,b(c)&&(h[c]=o)):_&&(c.value=o,e.k&&(a[e.k]=o))};o?(k.id=-1,Ee(k,n)):k()}}}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),In(),m._vnode=p;return}h(m.firstChild,p,null,null,null),In(),m._vnode=p},h=(p,m,M,F,$,V=!1)=>{V=V||!!m.dynamicChildren;const R=xt(p)&&p.data==="[",v=()=>_(p,m,M,F,$,R),{type:L,ref:x,shapeFlag:W,patchFlag:se}=m;let ce=p.nodeType;m.el=p,se===-2&&(V=!1,m.dynamicChildren=null);let U=null;switch(L){case mt:ce!==3?m.children===""?(c(m.el=r(""),o(p),p),U=p):U=v():(p.data!==m.children&&(wt(),p.data=m.children),U=i(p));break;case ye:j(p)?(U=i(p),N(m.el=p.content.firstChild,p,M)):ce!==8||R?U=v():U=i(p);break;case Bt:if(R&&(p=i(p),ce=p.nodeType),ce===1||ce===3){U=p;const Y=!m.children.length;for(let D=0;D{V=V||!!m.dynamicChildren;const{type:R,props:v,patchFlag:L,shapeFlag:x,dirs:W,transition:se}=m,ce=R==="input"||R==="option";if(ce||L!==-1){W&&Ue(m,null,M,"created");let U=!1;if(j(p)){U=po(F,se)&&M&&M.vnode.props&&M.vnode.props.appear;const D=p.content.firstChild;U&&se.beforeEnter(D),N(D,p,M),m.el=p=D}if(x&16&&!(v&&(v.innerHTML||v.textContent))){let D=b(p.firstChild,m,p,M,F,$,V);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(v){if(ce||!V||L&48){const D=p.tagName.includes("-");for(const he in v)(ce&&(he.endsWith("value")||he==="indeterminate")||Zt(he)&&!At(he)||he[0]==="."||D)&&s(p,he,null,v[he],void 0,M)}else if(v.onClick)s(p,"onClick",null,v.onClick,void 0,M);else if(L&4&&pt(v.style))for(const D in v.style)v.style[D]}let Y;(Y=v&&v.onVnodeBeforeMount)&&Oe(Y,M,m),W&&Ue(m,null,M,"beforeMount"),((Y=v&&v.onVnodeMounted)||W||U)&&bo(()=>{Y&&Oe(Y,M,m),U&&se.enter(p),W&&Ue(m,null,M,"mounted")},F)}return p.nextSibling},b=(p,m,M,F,$,V,R)=>{R=R||!!m.dynamicChildren;const v=m.children,L=v.length;for(let x=0;x{const{slotScopeIds:R}=m;R&&($=$?$.concat(R):R);const v=o(p),L=b(i(p),m,v,M,F,$,V);return L&&xt(L)&&L.data==="]"?i(m.anchor=L):(wt(),c(m.anchor=f("]"),v,L),L)},_=(p,m,M,F,$,V)=>{if(yn(p.parentElement,1)||wt(),m.el=null,V){const L=k(p);for(;;){const x=i(p);if(x&&x!==L)l(x);else break}}const R=i(p),v=o(p);return l(p),n(null,m,v,R,M,F,mn(v),$),R},k=(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},j=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,b()),b=()=>{let S;return f||(S=f=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),c)return new Promise((k,N)=>{c(_,()=>k(g()),()=>N(_),h+1)});throw _}).then(_=>S!==f&&f?f:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),a=_,_)))};return Qs({name:"AsyncComponentWrapper",__asyncLoader:b,__asyncHydrate(S,_,k){const N=i?()=>{const j=i(k,p=>oc(S,p));j&&(_.bum||(_.bum=[])).push(j)}:k;a?N():b().then(()=>!_.isUnmounted&&N())},get __asyncResolved(){return a},setup(){const S=ue;if(Zs(S),a)return()=>os(a,S);const _=p=>{f=null,tn(p,S,13,!s)};if(l&&S.suspense||rn)return b().then(p=>()=>os(p,S)).catch(p=>(_(p),()=>s?le(s,{error:p}):null));const k=oe(!1),N=oe(),j=oe(!!r);return r&&setTimeout(()=>{j.value=!1},r),o!=null&&setTimeout(()=>{if(!k.value&&!N.value){const p=new Error(`Async component timed out after ${o}ms.`);_(p),N.value=p}},o),b().then(()=>{k.value=!0,S.parent&&nn(S.parent.vnode)&&S.parent.update()}).catch(p=>{_(p),N.value=p}),()=>{if(k.value&&a)return os(a,S);if(N.value&&s)return le(s,{error:N.value});if(n&&!j.value)return le(n)}}})}function os(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(qn(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=qn(t,e,s,!0);Gn(()=>{Ds(s[t],r)},n)}function qn(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=He(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")&&qn(e,(...s)=>t(...s),n)},fc=Ye("bm"),It=Ye("m"),uc=Ye("bu"),dc=Ye("u"),zi=Ye("bum"),Gn=Ye("um"),hc=Ye("sp"),pc=Ye("rtg"),gc=Ye("rtc");function mc(e,t=ue){qn("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===jn(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[jn(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=Un(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}`:Sn(s)]=e[s];return n}const As=e=>e?xo(e)?Jn(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=Kn.bind(e.proxy)),$watch:e=>Dc.bind(e)}),ls=(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 b=o[t];if(b!==void 0)switch(b){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ls(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 ls(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)||ls(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=zn();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:b,updated:S,activated:_,deactivated:k,beforeDestroy:N,beforeUnmount:j,destroyed:p,unmounted:m,render:M,renderTracked:F,renderTriggered:$,errorCaptured:V,serverPrefetch:R,expose:v,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=kn(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):Be,on=!q(D)&&q(D.set)?D.set.bind(n):Be,lt=ie({get:he,set:on});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>lt.value,set:De=>lt.value=De})}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 U(Y,D){K(D)?D.forEach(he=>Y(he.bind(n))):D&&Y(D.bind(n))}if(U(fc,h),U(It,g),U(uc,b),U(dc,S),U(lc,_),U(cc,k),U(mc,V),U(gc,F),U(pc,$),U(zi,j),U(Gn,m),U(hc,R),K(v))if(v.length){const Y=e.exposed||(e.exposed={});v.forEach(D=>{Object.defineProperty(Y,D,{get:()=>n[D],set:he=>n[D]=he})})}else e.exposed||(e.exposed={});M&&e.render===Be&&(e.render=M),L!=null&&(e.inheritAttrs=L),x&&(e.components=x),W&&(e.directives=W),R&&Zs(e)}function _c(e,t,n=Be){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){He(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)&&Fe(r,i)}else if(q(e))Fe(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)&&Fe(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=>Fn(c,f,o,!0)),Fn(c,t,o)),ne(t)&&i.set(t,c),c}function Fn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Fn(e,i,n,!0),r&&r.forEach(o=>Fn(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,b]=lo(h,t,!0);fe(o,g),b&&l.push(...b)};!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:b=Be,insertStaticContent:S}=e,_=(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),De(u,w,E,!0),u=null),d.patchFlag===-2&&(A=!1,d.dynamicChildren=null);const{type:C,ref:B,shapeFlag:I}=d;switch(C){case mt:k(u,d,y,T);break;case ye:N(u,d,y,T);break;case Bt:u==null&&j(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)}B!=null&&w&&Nn(B,u&&u.ref,E,d||u,!d)},k=(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},j=(u,d,y,T)=>{[u.el,u.anchor]=S(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:B,shapeFlag:I,transition:H,dirs:G}=u;if(A=u.el=o(u.type,E,B&&B.is,B),I&8?a(A,u.children):I&16&&V(u.children,A,null,T,w,cs(u,E),P,O),G&&Ue(u,null,T,"created"),$(A,u,u.scopeId,P,T),B){for(const ee in B)ee!=="value"&&!At(ee)&&i(A,ee,null,B[ee],E,T);"value"in B&&i(A,"value",null,B.value,E),(C=B.onVnodeBeforeMount)&&Oe(C,T,u)}G&&Ue(u,null,T,"beforeMount");const X=po(w,H);X&&H.beforeEnter(A),s(A,d,y),((C=B&&B.onVnodeMounted)||X||G)&&Ee(()=>{C&&Oe(C,T,u),X&&H.enter(A),G&&Ue(u,null,T,"mounted")},w)},$=(u,d,y,T,w)=>{if(y&&b(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:B}=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),B&&Ue(d,u,y,"beforeUpdate"),y&&ct(y,!0),(I.innerHTML&&H.innerHTML==null||I.textContent&&H.textContent==null)&&a(O,""),C?v(u.dynamicChildren,C,O,y,T,cs(d,w),E):P||D(u,d,O,null,y,T,cs(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),B&&Ue(d,u,y,"updated")},T)},v=(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(""),B=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(B,y,T),V(d.children||[],y,B,w,E,P,O,A)):I>0&&I&64&&H&&u.dynamicChildren?(v(u.dynamicChildren,H,y,w,E,P,O),(d.key!=null||w&&d===w.subTree)&&nr(u,d,!0)):D(u,d,y,B,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,U,P),!u.el){const A=O.subTree=le(ye);N(null,A,d,y)}}else U(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},U=(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&&En(H),(xe=I.props&&I.props.onVnodeBeforeUpdate)&&Oe(xe,X,I,ee),ct(u,!0);const pe=as(u),Le=u.subTree;u.subTree=pe,_(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&&En(X),!Le&&(I=G&&G.onVnodeBeforeMount)&&Oe(I,Q,d),ct(u,!0),H&&es){const Te=()=>{u.subTree=as(u),es(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=as(u);_(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),B=u.job=A.runIfDirty.bind(A);B.i=u,B.id=u.uid,A.scheduler=()=>Js(B),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,B=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?(B&16&&Lt(C,w,E),I!==C&&a(y,I)):B&16?G&16?on(C,I,y,T,w,E,P,O,A):Lt(C,w,E,!0):(B&8&&a(y,""),G&16&&V(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,B=d.length,I=Math.min(C,B);let H;for(H=0;HB?Lt(u,w,E,!0,!1,I):V(d,y,T,w,E,P,O,A,I)},on=(u,d,y,T,w,E,P,O,A)=>{let C=0;const B=d.length;let I=u.length-1,H=B-1;for(;C<=I&&C<=H;){const G=u[C],X=d[C]=A?et(d[C]):Me(d[C]);if(dt(G,X))_(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))_(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;)De(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){De(Ce,w,E,!0);continue}let je;if(Ce.key!=null)je=ee.get(Ce.key);else for(Q=X;Q<=H;Q++)if(Nt[Q-X]===0&&dt(Ce,d[Q])){je=Q;break}je===void 0?De(Ce,w,E,!0):(Nt[je-X]=C+1,je>=Te?Te=je:Le=!0,_(Ce,d[je],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,je=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)},De=(u,d,y,T=!1,w=!1)=>{const{type:E,props:P,ref:O,children:A,dynamicChildren:C,shapeFlag:B,patchFlag:I,dirs:H,cacheIndex:G}=u;if(I===-2&&(w=!1),O!=null&&Nn(O,null,y,u,!0),G!=null&&(d.renderCache[G]=void 0),B&256){d.ctx.deactivate(u);return}const X=B&1&&H,ee=!gt(u);let Q;if(ee&&(Q=P&&P.onVnodeBeforeUnmount)&&Oe(Q,d,u),B&6)Xo(u.component,y,T);else{if(B&128){u.suspense.unmount(y,T);return}X&&Ue(u,null,d,"beforeUnmount"),B&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&&B&16)&&Lt(A,d,y),T&&cr(u)}(ee&&(Q=P&&P.onVnodeUnmounted)||X)&&Ee(()=>{Q&&Oe(Q,d,u),X&&Ue(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&&En(T),w.stop(),E&&(E.flags|=8,De(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 Qn=!1;const ar=(u,d,y)=>{u==null?d._vnode&&De(d._vnode,null,null,!0):_(d._vnode||null,u,d,null,null,null,y),d._vnode=u,Qn||(Qn=!0,br(),In(),Qn=!1)},bt={p:_,um:De,m:lt,r:cr,mt:se,mc:V,pc:D,pbc:v,n:ln,o:e};let Zn,es;return t&&([Zn,es]=t(bt)),{render:ar,hydrate:Zn,createApp:Tc(ar,Zn)}}function cs({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 Yn(e,null,t)}function Vf(e,t){return Yn(e,null,{flush:"post"})}function Fe(e,t,n){return Yn(e,t,n)}function Yn(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=Be,g.resume=Be,g.pause=Be,g}const f=ue;l.call=(g,b,S)=>He(g,f,b,S);let a=!1;i==="post"?l.scheduler=g=>{Ee(g,f&&f.suspense)}:i!=="sync"&&(a=!0,l.scheduler=(g,b)=>{b?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=Yn(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=Sn(t)]||s[l=Sn(Ie(t))];!c&&i&&(c=s[l=Sn(rt(t))]),c&&He(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,He(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 Xn(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 as(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:b,ctx:S,inheritAttrs:_}=e,k=Ln(e);let N,j;try{if(n.shapeFlag&4){const m=r||s,M=m;N=Me(f.call(M,m,a,h,b,g,S)),j=l}else{const m=t;N=Me(m.length>1?m(h,{attrs:l,slots:o,emit:c}):m(h,null)),j=t.props?l:Uc(l)}}catch(m){kt.length=0,tn(m,e,1),N=le(ye)}let p=N;if(j&&_!==!1){const m=Object.keys(j),{shapeFlag:M}=p;m.length&&M&7&&(i&&m.some($s)&&(j=Bc(j,i)),p=nt(p,j,!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,Ln(k),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,Cn=({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&&Cn(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(Cn(t)):[i,Cn(t)]:Cn(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 Hn,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)}};Hn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),Ls=t("__VUE_SSR_SETTERS__",n=>rn=n)}const sn=e=>{const t=ue;return Hn(e),e.scope.on(),()=>{e.scope.off(),Hn(t)}},Nr=()=>{ue&&ue.scope.off(),Hn(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||Be}{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 Jn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Hi(xn(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}; +**/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:b=`${n}-leave-to`}=e,S=fa(r),_=S&&S[0],k=S&&S[1],{onBeforeEnter:N,onEnter:j,onEnterCancelled:p,onLeave:m,onLeaveCancelled:M,onBeforeAppear:F=N,onAppear:$=j,onAppearCancelled:V=p}=t,R=(x,W,se)=>{ft(x,W?a:l),ft(x,W?f:o),se&&se()},v=(x,W)=>{x._isLeaving=!1,ft(x,h),ft(x,b),ft(x,g),W&&W()},L=x=>(W,se)=>{const ce=x?$:j,U=()=>R(W,x,se);at(ce,[W,U]),Vr(()=>{ft(W,x?c:i),Je(W,x?a:l),jr(ce)||Ur(W,s,_,U)})};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=()=>v(x,W);Je(x,h),Je(x,g),ha(),Vr(()=>{x._isLeaving&&(ft(x,h),Je(x,b),jr(m)||Ur(x,s,k,se))}),at(m,[x,se])},onEnterCancelled(x){R(x,!1),at(p,[x])},onAppearCancelled(x){R(x,!0),at(V,[x])},onLeaveCancelled(x){v(x),at(M,[x])}})}function fa(e){if(e==null)return null;if(ne(e))return[fs(e.enter),fs(e.leave)];{const t=fs(e);return[t,t]}}function fs(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=b=>{b.target===e&&++a>=c&&h()};setTimeout(()=>{a(n[S]||"").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 b=a===ze&&/\b(transform|all)(,|$)/.test(s(`${ze}Property`).toString());return{type:a,timeout:h,propCount:g,hasTransform:b}}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&&An(s,l,"")}else for(const o in t)n[o]==null&&An(s,o,"");for(const o in n)o==="display"&&(i=!0),An(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 An(e,t,n){if(K(n))n.forEach(s=>An(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"],us={};function ba(e,t){const n=us[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return us[t]=s;s=jn(s);for(let r=0;rds||(Ea.then(()=>ds=0),ds=Date.now());function Ta(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;He(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=>En(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 hs=Symbol("_assign"),Kf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[hs]=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[hs](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[hs]=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:Wn(t),pause:n,resume:s,eventFilter:r}}function Ba(e){return zn()}function No(...e){if(e.length!==1)return Vl(...e);const t=e[0];return typeof t=="function"?Wn($l(()=>({get:t,set:Qt}))):oe(t)}function Fo(e,t,n={}){const{eventFilter:s=Lo,...r}=n;return Fe(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():Kn(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 b=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const S=await e(_=>{h(()=>{i&&(i.value=!1),b||_()})});g===a&&(f.value=S)}catch(S){l(S)}finally{i&&g===a&&(i.value=!1),b=!0}}),r?ie(()=>(c.value=!0,f.value)):f}const $e=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=$e):[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,b)=>(a.addEventListener(h,g,b),()=>a.removeEventListener(h,g,b)),c=Fe(()=>[Ho(t),ke(r)],([a,h])=>{if(o(),!a)return;const g=$a(h)?{...h}:h;i.push(...n.flatMap(b=>s.map(S=>l(a,b,S,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=$e,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=zn();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=$e}=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=$e,eventFilter:g,onError:b=v=>{console.error(v)},initOnMounted:S}=s,_=(a?zs:oe)(typeof t=="function"?t():t);if(!n)try{n=Do("getDefaultStorage",()=>{var v;return(v=$e)==null?void 0:v.localStorage})()}catch(v){b(v)}if(!n)return _;const k=ke(t),N=Xa(k),j=(r=s.serializer)!=null?r:za[N],{pause:p,resume:m}=ka(_,()=>F(_.value),{flush:i,deep:o,eventFilter:g});h&&l&&or(()=>{n instanceof Storage?Pt(h,"storage",V):Pt(h,si,R),S&&V()}),S||V();function M(v,L){if(h){const x={key:e,oldValue:v,newValue:L,storageArea:n};h.dispatchEvent(n instanceof Storage?new StorageEvent("storage",x):new CustomEvent(si,{detail:x}))}}function F(v){try{const L=n.getItem(e);if(v==null)M(L,null),n.removeItem(e);else{const x=j.write(v);L!==x&&(n.setItem(e,x),M(L,x))}}catch(L){b(L)}}function $(v){const L=v?v.newValue:n.getItem(e);if(L==null)return c&&k!=null&&n.setItem(e,j.write(k)),k;if(!v&&f){const x=j.read(L);return typeof f=="function"?f(x,k):N==="object"&&!Array.isArray(x)?{...k,...x}:x}else return typeof L!="string"?L:j.read(L)}function V(v){if(!(v&&v.storageArea!==n)){if(v&&v.key==null){_.value=k;return}if(!(v&&v.key!==e)){p();try{(v==null?void 0:v.newValue)!==j.write(_.value)&&(_.value=$(v))}catch(L){b(L)}finally{v?Kn(m):m()}}}}function R(v){V(v.detail)}return _}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=$e,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}),b=ie(()=>g.value?"dark":"light"),S=c||(o==null?No(s):lr(o,s,i,{window:r,listenToStorageChanges:l})),_=ie(()=>S.value==="auto"?b.value:S.value),k=Do("updateHTMLAttrs",(m,M,F)=>{const $=typeof m=="string"?r==null?void 0:r.document.querySelector(m):Ho(m);if(!$)return;const V=new Set,R=new Set;let v=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)?V.add(W):R.add(W)})}else v={key:M,value:F};if(V.size===0&&R.size===0&&v===null)return;let L;a&&(L=r.document.createElement("style"),L.appendChild(document.createTextNode(Ja)),r.document.head.appendChild(L));for(const x of V)$.classList.add(x);for(const x of R)$.classList.remove(x);v&&$.setAttribute(v.key,v.value),a&&(r.getComputedStyle(L).opacity,document.head.removeChild(L))});function N(m){var M;k(t,n,(M=h[m])!=null?M:m)}function j(m){e.onChanged?e.onChanged(m,N):N(m)}Fe(_,j,{flush:"post",immediate:!0}),or(()=>j(_.value));const p=ie({get(){return f?S.value:_.value},set(m){S.value=m}});try{return Object.assign(p,{store:S,system:b,state:_})}catch{return p}}function Za(e={}){const{valueDark:t="dark",valueLight:n="",window:s=$e}=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 ps(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=$e}=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 gs=new WeakMap;function nu(e,t=!1){const n=oe(t);let s=null,r="";Fe(No(e),l=>{const c=ps(ke(l));if(c){const f=c;if(gs.get(f)||gs.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=ps(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=ps(ke(e));!l||!n.value||(ni&&(s==null||s()),l.style.overflow=r,gs.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=$e}=n;return lr(e,t,s==null?void 0:s.sessionStorage,n)}function ru(e={}){const{window:t=$e,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=$e,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)");Fe(a,()=>f())}return{width:l,height:c}}const ms={BASE_URL:"/ReefGuideAPI.jl/dev/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var ys={};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 vs=new Set;function pf(e){if(vs.size===0){const n=typeof process=="object"&&(ys==null?void 0:ys.VITE_EXTRA_EXTENSIONS)||(ms==null?void 0:ms.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=>vs.add(s))}const t=e.split(".").pop();return t==null||!vs.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}),Fe(()=>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 Rn=[];function cu(e){Rn.push(e),Gn(()=>{Rn=Rn.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=kn(wf()),s={route:n,go:r};async function r(l=ge?location.href:"/"){var c,f;l=bs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ge&&l!==bs(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,b;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 S=await e(h);if(!S)throw new Error(`Page not found: ${h}`);if(i===h){i=null;const{default:_,__pageData:k}=S;if(!_)throw new Error(`Invalid route component: ${_}`);await((b=s.onAfterPageLoad)==null?void 0:b.call(s,l)),n.path=ge?h:oi(h),n.component=xn(_),n.data=xn(k),ge&&Kn(()=>{let N=yt.value.base+k.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!yt.value.cleanUrls&&!N.endsWith("/")&&(N+=".html"),N!==a.pathname&&(a.pathname=N,l=N+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let j=null;try{j=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(j){ci(j,a.hash);return}}window.scrollTo(0,c)})}}catch(S){if(!/fetch|Page not found/.test(S.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(S),!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?xn(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:b,search:S}=new URL(f,c.baseURI),_=new URL(location.href);h===_.origin&&pf(g)&&(l.preventDefault(),g===_.pathname&&S===_.search?(b!==_.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:_.href,newURL:a}))),b?ci(c,b,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(bs(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 bs(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 _n=()=>Rn.forEach(e=>e()),fu=Qs({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=qo(),{frontmatter:n,site:s}=mf();return Fe(n,_n,{deep:!0,flush:"post"}),()=>Ns(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Ns(t.component,{onVnodeMounted:_n,onVnodeUpdated:_n,onVnodeUnmounted:_n}):"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,b)=>{h.addEventListener("load",g),h.addEventListener("error",()=>b(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 wn;const Mf=ge&&(wn=Go())&&wn.relList&&wn.relList.supports&&wn.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();Fe(()=>r.path,s),Gn(()=>{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,Kn as P,ru as Q,ge as R,Wn 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,kn 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,xn 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,Fe as q,$f as r,sr as s,cl as t,mf as u,It as v,Xl as w,Gn as x,Vf as y,dc as z}; diff --git a/dev/assets/chunks/theme.CqfubCF7.js b/dev/assets/chunks/theme.CqfubCF7.js new file mode 100644 index 0000000..398d496 --- /dev/null +++ b/dev/assets/chunks/theme.CqfubCF7.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.DG3t9BP7.js","assets/chunks/framework.CX_bWI7S.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 Ge,i as je,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 j,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.CX_bWI7S.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=Ge;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(je(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 v,b;return{label:(v=e.value.locales[t.value])==null?void 0:v.label,link:((b=e.value.locales[t.value])==null?void 0:b.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([v,b])=>l.value.label===b.label?[]:{text:b.label,link:lt(b.link||(v==="root"?"/":`/${v}/`),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,d,v,b;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(((d=r(e).notFound)==null?void 0:d.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":((v=r(e).notFound)==null?void 0:v.linkLabel)??"go to home"},w(((b=r(e).notFound)==null?void 0:b.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 d=y(()=>o.value.sidebar!==!1&&l.value.length>0&&o.value.layout!=="home"),v=y(()=>b?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),b=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),V=y(()=>d.value&&s.value),_=y(()=>d.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:_,hasSidebar:d,hasAside:b,leftAside:v,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),d=()=>{l.value=K(e.value.relativePath,o.value.link)};F([e,o,t],d),z(d);const v=y(()=>l.value?!0:o.value.items?ce(e.value.relativePath,o.value.items):!1),b=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),fe(()=>{(l.value||v.value)&&(s.value=!1)});function V(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:l,hasActiveLink:v,hasChildren:b,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;return Lt(o,s,n)}function St(o,e){const{isAsideEnabled:t}=$t(),s=it(i,100);let n=null;z(()=>{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{l(location.hash)}),pe(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const d=window.scrollY,v=window.innerHeight,b=document.body.offsetHeight,V=Math.abs(d+v-b)<1,_=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(!_.length){l(null);return}if(d<1){l(null);return}if(V){l(_[_.length-1].link);return}let P=null;for(const{link:S,top:A}of _){if(A>d+Re()+4)break;P=S}l(P)}function l(d){n&&n.classList.remove("active"),d==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const v=n;v?(v.classList.add("active"),e.value.style.top=v.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}function Lt(o,e,t){ue.length=0;const s=[],n=[];return o.forEach(i=>{const l={...i,children:[]};let d=n[n.length-1];for(;d&&d.level>=l.level;)n.pop(),d=n[n.length-1];if(l.element.classList.contains("ignore-header")||d&&"shouldIgnore"in d){n.push({level:l.level,shouldIgnore:!0});return}l.level>t||l.level{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:d})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:d},w(d),9,Tt),i!=null&&i.length?(a(),g(n,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Be=$(Nt,[["__scopeId","data-v-3f927ebe"]]),wt={class:"content"},It={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Mt=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,d)=>(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",wt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",It,w(r(Ce)(r(t))),1),k(Be,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),At=$(Mt,[["__scopeId","data-v-b38bf2ff"]]),Ct={class:"VPDocAsideCarbonAds"},Bt=m({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),u("div",Ct,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ht={class:"VPDocAside"},Et=m({__name:"VPDocAside",setup(o){const{theme:e}=L();return(t,s)=>(a(),u("div",Ht,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(At),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(Bt,{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)]))}}),Dt=$(Et,[["__scopeId","data-v-6d7b3c46"]]);function Ft(){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 Ot(){const{page:o,theme:e,frontmatter:t}=L();return y(()=>{var b,V,_,P,S,A,C,N;const s=Ae(e.value.sidebar,o.value.relativePath),n=bt(s),i=Ut(n,H=>H.link.replace(/[?#].*$/,"")),l=i.findIndex(H=>K(o.value.relativePath,H.link)),d=((b=e.value.docFooter)==null?void 0:b.prev)===!1&&!t.value.prev||t.value.prev===!1,v=((V=e.value.docFooter)==null?void 0:V.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((_=i[l-1])==null?void 0:_.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:v?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 Ut(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"]))}}),Gt={class:"VPLastUpdated"},jt=["datetime"],zt=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 d,v,b;l.value=new Intl.DateTimeFormat((v=(d=e.value.lastUpdated)==null?void 0:d.formatOptions)!=null&&v.forceLocale?s.value:void 0,((b=e.value.lastUpdated)==null?void 0:b.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(d,v)=>{var b;return a(),u("p",Gt,[O(w(((b=r(e).lastUpdated)==null?void 0:b.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},w(l.value),9,jt)])}}}),Kt=$(zt,[["__scopeId","data-v-475f71b8"]]),Rt={key:0,class:"VPDocFooter"},Wt={key:0,class:"edit-info"},qt={key:0,class:"edit-link"},Jt={key:1,class:"last-updated"},Yt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Xt={class:"pager"},Qt=["innerHTML"],Zt=["innerHTML"],xt={class:"pager"},en=["innerHTML"],tn=["innerHTML"],nn=m({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=L(),n=Ft(),i=Ot(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),d=y(()=>t.value.lastUpdated),v=y(()=>l.value||d.value||i.value.prev||i.value.next);return(b,V)=>{var _,P,S,A;return v.value?(a(),u("footer",Rt,[c(b.$slots,"doc-footer-before",{},void 0,!0),l.value||d.value?(a(),u("div",Wt,[l.value?(a(),u("div",qt,[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),d.value?(a(),u("div",Jt,[k(Kt)])):h("",!0)])):h("",!0),(_=r(i).prev)!=null&&_.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",Yt,[V[1]||(V[1]=p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),p("div",Xt,[(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,Qt),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,Zt)]}),_:1},8,["href"])):h("",!0)]),p("div",xt,[(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,en),p("span",{class:"title",innerHTML:r(i).next.text},null,8,tn)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),sn=$(nn,[["__scopeId","data-v-4f9813fa"]]),on={class:"container"},an={class:"aside-container"},rn={class:"aside-content"},ln={class:"content"},cn={class:"content-container"},un={class:"main"},dn=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(d,v)=>{const b=R("Content");return a(),u("div",{class:I(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[c(d.$slots,"doc-top",{},void 0,!0),p("div",on,[r(n)?(a(),u("div",{key:0,class:I(["aside",{"left-aside":r(i)}])},[v[0]||(v[0]=p("div",{class:"aside-curtain"},null,-1)),p("div",an,[p("div",rn,[k(Dt,null,{"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})])])],2)):h("",!0),p("div",ln,[p("div",cn,[c(d.$slots,"doc-before",{},void 0,!0),p("main",un,[k(b,{class:I(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(sn,null,{"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(d.$slots,"doc-after",{},void 0,!0)])])]),c(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),vn=$(dn,[["__scopeId","data-v-83890dd9"]]),pn=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"]))}}),fn=$(pn,[["__scopeId","data-v-906d7fb4"]]),hn=["src","alt"],mn=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",j({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,hn)):(a(),u(M,{key:1},[k(s,j({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,j({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),Q=$(mn,[["__scopeId","data-v-35a7d0b8"]]),_n={class:"container"},bn={class:"main"},kn={key:0,class:"name"},gn=["innerHTML"],$n=["innerHTML"],yn=["innerHTML"],Pn={key:0,class:"actions"},Sn={key:0,class:"image"},Vn={class:"image-container"},Ln=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",_n,[p("div",bn,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",kn,[p("span",{innerHTML:t.name,class:"clip"},null,8,gn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,$n)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,yn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",Pn,[(a(!0),u(M,null,B(t.actions,n=>(a(),u("div",{key:n.link,class:"action"},[k(fn,{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",Sn,[p("div",Vn,[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))}}),Tn=$(Ln,[["__scopeId","data-v-955009fc"]]),Nn=m({__name:"VPHomeHero",setup(o){const{frontmatter:e}=L();return(t,s)=>r(e).hero?(a(),g(Tn,{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)}}),wn={class:"box"},In={key:0,class:"icon"},Mn=["innerHTML"],An=["innerHTML"],Cn=["innerHTML"],Bn={key:4,class:"link-text"},Hn={class:"link-text-value"},En=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",wn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",In,[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,Mn)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,An),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Cn)):h("",!0),e.linkText?(a(),u("div",Bn,[p("p",Hn,[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"]))}}),Dn=$(En,[["__scopeId","data-v-f5e9645b"]]),Fn={key:0,class:"VPFeatures"},On={class:"container"},Un={class:"items"},Gn=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",Fn,[p("div",On,[p("div",Un,[(a(!0),u(M,null,B(s.features,i=>(a(),u("div",{key:i.title,class:I(["item",[t.value]])},[k(Dn,{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=$(Gn,[["__scopeId","data-v-d0a190d7"]]),zn=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)}}),Kn=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))}}),Rn=$(Kn,[["__scopeId","data-v-7a48a447"]]),Wn={class:"VPHome"},qn=m({__name:"VPHome",setup(o){const{frontmatter:e}=L();return(t,s)=>{const n=R("Content");return a(),u("div",Wn,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Nn,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(zn),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),g(Rn,{key:0},{default:f(()=>[k(n)]),_:1})):(a(),g(n,{key:1}))])}}}),Jn=$(qn,[["__scopeId","data-v-cbb6ec48"]]),Yn={},Xn={class:"VPPage"};function Qn(o,e){const t=R("Content");return a(),u("div",Xn,[c(o.$slots,"page-top"),k(t),c(o.$slots,"page-bottom")])}const Zn=$(Yn,[["render",Qn]]),xn=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(Zn,{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(Jn,{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(vn,{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))}}),es=$(xn,[["__scopeId","data-v-91765379"]]),ts={class:"container"},ns=["innerHTML"],ss=["innerHTML"],os=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",ts,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,ns)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ss)):h("",!0)])],2)):h("",!0)}}),as=$(os,[["__scopeId","data-v-c970a860"]]);function rs(){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 is={class:"menu-text"},ls={class:"header"},cs={class:"outline"},us=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 d(_){var P;(P=i.value)!=null&&P.contains(_.target)||(s.value=!1)}F(s,_=>{if(_){document.addEventListener("click",d);return}document.removeEventListener("click",d)}),ie("Escape",()=>{s.value=!1}),x(()=>{s.value=!1});function v(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function 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(_,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Te({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[_.headers.length>0?(a(),u("button",{key:0,onClick:v,class:I({open:s.value})},[p("span",is,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:b},[p("div",ls,[p("a",{class:"top-link",href:"#",onClick:V},w(r(t).returnToTopLabel||"Return to top"),1)]),p("div",cs,[k(Be,{headers:_.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),ds=$(us,[["__scopeId","data-v-bc9dc845"]]),vs={class:"container"},ps=["aria-expanded"],fs={class:"menu-text"},hs=m({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=L(),{hasSidebar:s}=U(),{headers:n}=rs(),{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 d=y(()=>n.value.length===0),v=y(()=>d.value&&!s.value),b=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:d.value,fixed:v.value}));return(V,_)=>r(t).layout!=="home"&&(!v.value||r(i)>=l.value)?(a(),u("div",{key:0,class:I(b.value)},[p("div",vs,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":V.open,"aria-controls":"VPSidebarNav",onClick:_[0]||(_[0]=P=>V.$emit("open-menu"))},[_[1]||(_[1]=p("span",{class:"vpi-align-left menu-icon"},null,-1)),p("span",fs,w(r(e).sidebarMenuLabel||"Menu"),1)],8,ps)):h("",!0),k(ds,{headers:r(n),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),ms=$(hs,[["__scopeId","data-v-070ab83d"]]);function _s(){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 bs={},ks={class:"VPSwitch",type:"button",role:"switch"},gs={class:"check"},$s={key:0,class:"icon"};function ys(o,e){return a(),u("button",ks,[p("span",gs,[o.$slots.default?(a(),u("span",$s,[c(o.$slots,"default",{},void 0,!0)])):h("",!0)])])}const Ps=$(bs,[["render",ys],["__scopeId","data-v-4a1c76db"]]),Ss=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(Ps,{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=$(Ss,[["__scopeId","data-v-e40a8bb6"]]),Vs={key:0,class:"VPNavBarAppearance"},Ls=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",Vs,[k(be)])):h("",!0)}}),Ts=$(Ls,[["__scopeId","data-v-af096f4a"]]),ke=T();let He=!1,ae=0;function Ns(o){const e=T(!1);if(te){!He&&ws(),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||Is()})}return qe(e)}function ws(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function Is(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Ms={class:"VPMenuLink"},As=m({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=L();return(t,s)=>(a(),u("div",Ms,[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=$(As,[["__scopeId","data-v-8b74d055"]]),Cs={class:"VPMenuGroup"},Bs={key:0,class:"title"},Hs=m({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",Cs,[e.text?(a(),u("p",Bs,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))]))}}),Es=$(Hs,[["__scopeId","data-v-48c802d0"]]),Ds={class:"VPMenu"},Fs={key:0,class:"items"},Os=m({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),u("div",Ds,[e.items?(a(),u("div",Fs,[(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),j({key:1,ref_for:!0},s.props),null,16)):(a(),g(Es,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),Us=$(Os,[["__scopeId","data-v-7dd3104a"]]),Gs=["aria-expanded","aria-label"],js={key:0,class:"text"},zs=["innerHTML"],Ks={key:1,class:"vpi-more-horizontal icon"},Rs={class:"menu"},Ws=m({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=T(!1),t=T();Ns({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,zs)):h("",!0),i[3]||(i[3]=p("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(a(),u("span",Ks))],8,Gs),p("div",Rs,[k(Us,{items:n.items},{default:f(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ge=$(Ws,[["__scopeId","data-v-04f5c5e9"]]),qs=["href","aria-label","innerHTML"],Js=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,qs))}}),Ys=$(Js,[["__scopeId","data-v-717b8b75"]]),Xs={class:"VPSocialLinks"},Qs=m({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),u("div",Xs,[(a(!0),u(M,null,B(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),g(Ys,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=$(Qs,[["__scopeId","data-v-ee7a9424"]]),Zs={key:0,class:"group translations"},xs={class:"trans-title"},eo={key:1,class:"group"},to={class:"item appearance"},no={class:"label"},so={class:"appearance-action"},oo={key:2,class:"group"},ao={class:"item social-links"},ro=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,d)=>i.value?(a(),g(ge,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(n).label?(a(),u("div",Zs,[p("p",xs,w(r(n).label),1),(a(!0),u(M,null,B(r(s),v=>(a(),g(ne,{key:v.link,item:v},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",eo,[p("div",to,[p("p",no,w(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",so,[k(be)])])])):h("",!0),r(t).socialLinks?(a(),u("div",oo,[p("div",ao,[k($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),io=$(ro,[["__scopeId","data-v-925effce"]]),lo=["aria-expanded"],co=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,lo))}}),uo=$(co,[["__scopeId","data-v-5dea55bf"]]),vo=["innerHTML"],po=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,vo)]),_:1},8,["class","href","noIcon","target","rel"]))}}),fo=$(po,[["__scopeId","data-v-ed5ac1f6"]]),ho=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"]))}}),mo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},_o=m({__name:"VPNavBarMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",mo,[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(fo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),j({key:1,ref_for:!0},n.props),null,16)):(a(),g(ho,{key:2,item:n},null,8,["item"]))],64))),128))])):h("",!0)}}),bo=$(_o,[["__scopeId","data-v-e6d46098"]]);function ko(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,d=l&&typeof l=="object",v=d&&((N=(C=l.locales)==null?void 0:C[e.value])==null?void 0:N.translations)||null,b=d&&l.translations||null;let V=v,_=b,P=o;const S=i.pop();for(const H of i){let G=null;const W=P==null?void 0:P[H];W&&(G=P=W);const se=_==null?void 0:_[H];se&&(G=_=se);const oe=V==null?void 0:V[H];oe&&(G=V=oe),W||(P=G),se||(_=G),oe||(V=G)}return(V==null?void 0:V[S])??(_==null?void 0:_[S])??(P==null?void 0:P[S])??""}return s}const go=["aria-label"],$o={class:"DocSearch-Button-Container"},yo={class:"DocSearch-Button-Placeholder"},ye=m({__name:"VPNavBarSearchButton",setup(o){const t=ko({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",$o,[n[0]||(n[0]=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),p("span",yo,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,go))}}),Po={class:"VPNavBarSearch"},So={id:"local-search"},Vo={key:1,id:"docsearch"},Lo=m({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.DG3t9BP7.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(d,16))}function d(){const _=new Event("keydown");_.key="k",_.metaKey=!0,window.dispatchEvent(_),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function v(_){const P=_.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const b=T(!1);ie("k",_=>{(_.ctrlKey||_.metaKey)&&(_.preventDefault(),b.value=!0)}),ie("/",_=>{v(_)||(_.preventDefault(),b.value=!0)});const V="local";return(_,P)=>{var S;return a(),u("div",Po,[r(V)==="local"?(a(),u(M,{key:0},[b.value?(a(),g(r(e),{key:0,onClose:P[0]||(P[0]=A=>b.value=!1)})):h("",!0),p("div",So,[k(ye,{onClick:P[1]||(P[1]=A=>b.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",Vo,[k(ye,{onClick:l})]))],64)):h("",!0)])}}}),To=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)}}),No=$(To,[["__scopeId","data-v-164c457f"]]),wo=["href","rel","target"],Io={key:1},Mo={key:2},Ao=m({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=L(),{hasSidebar:s}=U(),{currentLang:n}=Y(),i=y(()=>{var v;return typeof t.value.logoLink=="string"?t.value.logoLink:(v=t.value.logoLink)==null?void 0:v.link}),l=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.rel}),d=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.target});return(v,b)=>(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:d.value},[c(v.$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",Io,w(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",Mo,w(r(e).title),1)):h("",!0),c(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,wo)],2))}}),Co=$(Ao,[["__scopeId","data-v-28a961f9"]]),Bo={class:"items"},Ho={class:"title"},Eo=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",Bo,[p("p",Ho,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)}}),Do=$(Eo,[["__scopeId","data-v-c80d9ad0"]]),Fo={class:"wrapper"},Oo={class:"container"},Uo={class:"title"},Go={class:"content"},jo={class:"content-body"},zo=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,d)=>(a(),u("div",{class:I(["VPNavBar",i.value])},[p("div",Fo,[p("div",Oo,[p("div",Uo,[k(Co,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",Go,[p("div",jo,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(Lo,{class:"search"}),k(bo,{class:"menu"}),k(Do,{class:"translations"}),k(Ts,{class:"appearance"}),k(No,{class:"social-links"}),k(io,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(uo,{class:"hamburger",active:l.isScreenOpen,onClick:d[0]||(d[0]=v=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),d[1]||(d[1]=p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1))],2))}}),Ko=$(zo,[["__scopeId","data-v-822684d1"]]),Ro={key:0,class:"VPNavScreenAppearance"},Wo={class:"text"},qo=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",Ro,[p("p",Wo,w(r(t).darkModeSwitchLabel||"Appearance"),1),k(be)])):h("",!0)}}),Jo=$(qo,[["__scopeId","data-v-ffb44008"]]),Yo=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"]))}}),Xo=$(Yo,[["__scopeId","data-v-27d04aeb"]]),Qo=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=$(Qo,[["__scopeId","data-v-7179dbb7"]]),Zo={class:"VPNavScreenMenuGroupSection"},xo={key:0,class:"title"},ea=m({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),u("div",Zo,[e.text?(a(),u("p",xo,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))]))}}),ta=$(ea,[["__scopeId","data-v-4b8941ac"]]),na=["aria-controls","aria-expanded"],sa=["innerHTML"],oa=["id"],aa={key:0,class:"item"},ra={key:1,class:"item"},ia={key:2,class:"group"},la=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,sa),l[0]||(l[0]=p("span",{class:"vpi-plus button-icon"},null,-1))],8,na),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,B(i.items,d=>(a(),u(M,{key:JSON.stringify(d)},["link"in d?(a(),u("div",aa,[k(De,{item:d},null,8,["item"])])):"component"in d?(a(),u("div",ra,[(a(),g(E(d.component),j({ref_for:!0},d.props,{"screen-menu":""}),null,16))])):(a(),u("div",ia,[k(ta,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,oa)],2))}}),ca=$(la,[["__scopeId","data-v-875057a5"]]),ua={key:0,class:"VPNavScreenMenu"},da=m({__name:"VPNavScreenMenu",setup(o){const{theme:e}=L();return(t,s)=>r(e).nav?(a(),u("nav",ua,[(a(!0),u(M,null,B(r(e).nav,n=>(a(),u(M,{key:JSON.stringify(n)},["link"in n?(a(),g(Xo,{key:0,item:n},null,8,["item"])):"component"in n?(a(),g(E(n.component),j({key:1,ref_for:!0},n.props,{"screen-menu":""}),null,16)):(a(),g(ca,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),va=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)}}),pa={class:"list"},fa=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",pa,[(a(!0),u(M,null,B(r(e),d=>(a(),u("li",{key:d.link,class:"item"},[k(D,{class:"link",href:d.link},{default:f(()=>[O(w(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),ha=$(fa,[["__scopeId","data-v-362991c2"]]),ma={class:"container"},_a=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",ma,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(da,{class:"menu"}),k(ha,{class:"translations"}),k(Jo,{class:"appearance"}),k(va,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),ba=$(_a,[["__scopeId","data-v-833aabba"]]),ka={key:0,class:"VPNav"},ga=m({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=_s(),{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,d)=>i.value?(a(),u("header",ka,[k(Ko,{"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(ba,{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)}}),$a=$(ga,[["__scopeId","data-v-f1e365da"]]),ya=["role","tabindex"],Pa={key:1,class:"items"},Sa=m({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:l,hasChildren:d,toggle:v}=gt(y(()=>e.item)),b=y(()=>d.value?"section":"div"),V=y(()=>n.value?"a":"div"),_=y(()=>d.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&&v()}function C(){e.item.link&&v()}return(N,H)=>{const G=R("VPSidebarItem",!0);return a(),g(E(b.value),{class:I(["VPSidebarItem",S.value])},{default:f(()=>[N.item.text?(a(),u("div",j({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(_.value),{class:"text",innerHTML:N.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),g(E(_.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,ya)):h("",!0),N.item.items&&N.item.items.length?(a(),u("div",Pa,[N.depth<5?(a(!0),u(M,{key:0},B(N.item.items,W=>(a(),g(G,{key:W.text,item:W,depth:N.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),Va=$(Sa,[["__scopeId","data-v-196b2e5f"]]),La=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(Va,{item:i,depth:0},null,8,["item"])],2))),128))}}),Ta=$(La,[["__scopeId","data-v-9e426adc"]]),Na={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},wa=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 d;s.open?(i.value=!0,(d=n.value)==null||d.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return F(e,()=>{l.value+=1},{deep:!0}),(d,v)=>r(t)?(a(),u("aside",{key:0,class:I(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:n,onClick:v[0]||(v[0]=xe(()=>{},["stop"]))},[v[2]||(v[2]=p("div",{class:"curtain"},null,-1)),p("nav",Na,[v[1]||(v[1]=p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(d.$slots,"sidebar-nav-before",{},void 0,!0),(a(),g(Ta,{items:r(e),key:l.value},null,8,["items"])),c(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),Ia=$(wa,[["__scopeId","data-v-18756405"]]),Ma=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))}}),Aa=$(Ma,[["__scopeId","data-v-c3508ec8"]]),Ca=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(),d=y(()=>!!l["home-hero-image"]);return he("hero-image-slot-exists",d),(v,b)=>{const V=R("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:I(["Layout",r(i).pageClass])},[c(v.$slots,"layout-top",{},void 0,!0),k(Aa),k(rt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k($a,null,{"nav-bar-title-before":f(()=>[c(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(ms,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k(Ia,{open:r(e)},{"sidebar-nav-before":f(()=>[c(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(es,null,{"page-top":f(()=>[c(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(v.$slots,"doc-bottom",{},void 0,!0)]),"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}),k(as),c(v.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),g(V,{key:1}))}}}),Ba=$(Ca,[["__scopeId","data-v-a9a9e638"]]),Pe={Layout:Ba,enhanceApp:({app:o})=>{o.component("Badge",st)}},Ha=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 d=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-d,i}}},Fe="vitepress:tabSharedState",J=typeof localStorage<"u"?localStorage:null,Oe="vitepress:tabsSharedState",Ea=()=>{const o=J==null?void 0:J.getItem(Oe);if(o)try{return JSON.parse(o)}catch{}return{}},Da=o=>{J&&J.setItem(Oe,JSON.stringify(o))},Fa=o=>{const e=et({});F(()=>e.content,(t,s)=>{t&&s&&Da(t)},{deep:!0}),o.provide(Fe,e)},Oa=(o,e)=>{const t=q(Fe);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");z(()=>{t.content||(t.content=Ea())});const s=T(),n=y({get(){var v;const l=e.value,d=o.value;if(l){const b=(v=t.content)==null?void 0:v[l];if(b&&d.includes(b))return b}else{const b=s.value;if(b)return b}return d[0]},set(l){const d=e.value;d?t.content&&(t.content[d]=l):s.value=l}});return{selected:n,select:l=>{n.value=l}}};let Se=0;const Ua=()=>(Se++,""+Se);function Ga(){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)},za=()=>{const o=q(Ue);if(!o)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return o},Ka={class:"plugin-tabs"},Ra=["id","aria-selected","aria-controls","tabindex","onClick"],Wa=m({__name:"PluginTabs",props:{sharedStateKey:{}},setup(o){const e=o,t=Ga(),{selected:s,select:n}=Oa(t,tt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Ha(i),d=l(n),v=T([]),b=_=>{var A;const P=t.value.indexOf(s.value);let S;_.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:_.key==="ArrowRight"&&(S=P(a(),u("div",Ka,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:b},[(a(!0),u(M,null,B(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(V)}`,ref_for:!0,ref_key:"buttonRefs",ref:v,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(d)(S)},w(S),9,Ra))),128))],544),c(_.$slots,"default")]))}}),qa=["id","aria-labelledby"],Ja=m({__name:"PluginTabsTab",props:{label:{}},setup(o){const{uid:e,selected:t}=za();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,qa)):h("",!0)}}),Ya=$(Ja,[["__scopeId","data-v-9b0d03d2"]]),Xa=o=>{Fa(o),o.component("PluginTabs",Wa),o.component("PluginTabsTab",Ya)},Za={extends:Pe,Layout(){return nt(Pe.Layout,null,{})},enhanceApp({app:o,router:e,siteData:t}){Xa(o)}};export{Za as R,ko as c,L as u}; diff --git a/dev/assets/chunks/theme.Db56iT4S.js b/dev/assets/chunks/theme.Db56iT4S.js deleted file mode 100644 index 07b0bd9..0000000 --- a/dev/assets/chunks/theme.Db56iT4S.js +++ /dev/null @@ -1,2 +0,0 @@ -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.CeXB9QeU.js b/dev/assets/docker.md.DslhilOy.js similarity index 98% rename from dev/assets/docker.md.CeXB9QeU.js rename to dev/assets/docker.md.DslhilOy.js index 33641f7..e8227ac 100644 --- a/dev/assets/docker.md.CeXB9QeU.js +++ b/dev/assets/docker.md.DslhilOy.js @@ -1,2 +1,2 @@ -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
+import{_ as e,c as s,a5 as a,o as t}from"./chunks/framework.CX_bWI7S.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.CeXB9QeU.lean.js b/dev/assets/docker.md.DslhilOy.lean.js similarity index 98% rename from dev/assets/docker.md.CeXB9QeU.lean.js rename to dev/assets/docker.md.DslhilOy.lean.js index 33641f7..e8227ac 100644 --- a/dev/assets/docker.md.CeXB9QeU.lean.js +++ b/dev/assets/docker.md.DslhilOy.lean.js @@ -1,2 +1,2 @@ -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
+import{_ as e,c as s,a5 as a,o as t}from"./chunks/framework.CX_bWI7S.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.ArdKq2gR.js b/dev/assets/getting_started.md.CWSKhprt.js similarity index 86% rename from dev/assets/getting_started.md.ArdKq2gR.js rename to dev/assets/getting_started.md.CWSKhprt.js index d750b6d..a4e34e7 100644 --- a/dev/assets/getting_started.md.ArdKq2gR.js +++ b/dev/assets/getting_started.md.CWSKhprt.js @@ -1,4 +1,4 @@ -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]
+import{_ as e,c as i,a5 as a,o as t}from"./chunks/framework.CX_bWI7S.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,h,o,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]
@@ -23,4 +23,4 @@ import{_ as e,c as i,a5 as a,o as t}from"./chunks/framework.DT0TDSCa.js";const k
 $ julia --project=.
 (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).

`,42)]))}const u=e(n,[["render",l]]);export{k as __pageData,u as default}; +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_edge_aligned_sites() 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_edge_aligned_sites(default =:geometry).

`,42)]))}const u=e(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/dev/assets/getting_started.md.ArdKq2gR.lean.js b/dev/assets/getting_started.md.CWSKhprt.lean.js similarity index 86% rename from dev/assets/getting_started.md.ArdKq2gR.lean.js rename to dev/assets/getting_started.md.CWSKhprt.lean.js index d750b6d..a4e34e7 100644 --- a/dev/assets/getting_started.md.ArdKq2gR.lean.js +++ b/dev/assets/getting_started.md.CWSKhprt.lean.js @@ -1,4 +1,4 @@ -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]
+import{_ as e,c as i,a5 as a,o as t}from"./chunks/framework.CX_bWI7S.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,h,o,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]
@@ -23,4 +23,4 @@ import{_ as e,c as i,a5 as a,o as t}from"./chunks/framework.DT0TDSCa.js";const k
 $ julia --project=.
 (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).

`,42)]))}const u=e(n,[["render",l]]);export{k as __pageData,u as default}; +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_edge_aligned_sites() 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_edge_aligned_sites(default =:geometry).

`,42)]))}const u=e(n,[["render",l]]);export{k as __pageData,u as default}; diff --git a/dev/assets/index.md.CBMAENFQ.js b/dev/assets/index.md.BF5iuP_Y.js similarity index 90% rename from dev/assets/index.md.CBMAENFQ.js rename to dev/assets/index.md.BF5iuP_Y.js index 88e0294..6bb79ae 100644 --- a/dev/assets/index.md.CBMAENFQ.js +++ b/dev/assets/index.md.BF5iuP_Y.js @@ -1 +1 @@ -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}; +import{_ as t,c as r,j as e,a as i,o as s}from"./chunks/framework.CX_bWI7S.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.CBMAENFQ.lean.js b/dev/assets/index.md.BF5iuP_Y.lean.js similarity index 90% rename from dev/assets/index.md.CBMAENFQ.lean.js rename to dev/assets/index.md.BF5iuP_Y.lean.js index 88e0294..6bb79ae 100644 --- a/dev/assets/index.md.CBMAENFQ.lean.js +++ b/dev/assets/index.md.BF5iuP_Y.lean.js @@ -1 +1 @@ -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}; +import{_ as t,c as r,j as e,a as i,o as s}from"./chunks/framework.CX_bWI7S.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/style.Bh_rbBNd.css b/dev/assets/style.CuQhdqpM.css similarity index 98% rename from dev/assets/style.Bh_rbBNd.css rename to dev/assets/style.CuQhdqpM.css index 562a676..2b8b196 100644 --- a/dev/assets/style.Bh_rbBNd.css +++ b/dev/assets/style.CuQhdqpM.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic";@import"https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic";@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b06cdb19]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-b06cdb19],.VPBackdrop.fade-leave-to[data-v-b06cdb19]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b06cdb19]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b06cdb19]{display:none}}.NotFound[data-v-951cab6c]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-951cab6c]{padding:96px 32px 168px}}.code[data-v-951cab6c]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-951cab6c]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-951cab6c]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-951cab6c]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-951cab6c]{padding-top:20px}.link[data-v-951cab6c]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-951cab6c]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3f927ebe]{position:relative;z-index:1}.nested[data-v-3f927ebe]{padding-right:16px;padding-left:16px}.outline-link[data-v-3f927ebe]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3f927ebe]:hover,.outline-link.active[data-v-3f927ebe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3f927ebe]{padding-left:13px}.VPDocAsideOutline[data-v-b38bf2ff]{display:none}.VPDocAsideOutline.has-outline[data-v-b38bf2ff]{display:block}.content[data-v-b38bf2ff]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-b38bf2ff]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-b38bf2ff]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-6d7b3c46]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6d7b3c46]{flex-grow:1}.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6d7b3c46] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-475f71b8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-475f71b8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-4f9813fa]{margin-top:64px}.edit-info[data-v-4f9813fa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-4f9813fa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-4f9813fa]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-4f9813fa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-4f9813fa]{margin-right:8px}.prev-next[data-v-4f9813fa]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-4f9813fa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-4f9813fa]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-4f9813fa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-4f9813fa]{margin-left:auto;text-align:right}.desc[data-v-4f9813fa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-4f9813fa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-83890dd9]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-83890dd9]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-83890dd9]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-83890dd9]{display:flex;justify-content:center}.VPDoc .aside[data-v-83890dd9]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{max-width:1104px}}.container[data-v-83890dd9]{margin:0 auto;width:100%}.aside[data-v-83890dd9]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-83890dd9]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-83890dd9]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-83890dd9]::-webkit-scrollbar{display:none}.aside-curtain[data-v-83890dd9]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-83890dd9]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-83890dd9]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-83890dd9]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-83890dd9]{order:1;margin:0;min-width:640px}}.content-container[data-v-83890dd9]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-83890dd9]{max-width:688px}.VPButton[data-v-14206e74]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-14206e74]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-14206e74]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-14206e74]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-14206e74]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-14206e74]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-14206e74]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-14206e74]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-14206e74]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-14206e74]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-14206e74]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-14206e74]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-14206e74]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-35a7d0b8]{display:none}.dark .VPImage.light[data-v-35a7d0b8]{display:none}.VPHero[data-v-955009fc]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-955009fc]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-955009fc]{flex-direction:row}}.main[data-v-955009fc]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-955009fc]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-955009fc]{text-align:left}}@media (min-width: 960px){.main[data-v-955009fc]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-955009fc]{max-width:592px}}.name[data-v-955009fc],.text[data-v-955009fc]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0 auto}.name[data-v-955009fc]{color:var(--vp-home-hero-name-color)}.clip[data-v-955009fc]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-955009fc],.text[data-v-955009fc]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-955009fc],.text[data-v-955009fc]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0}}.tagline[data-v-955009fc]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-955009fc]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-955009fc]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-955009fc]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-955009fc]{margin:0}}.actions[data-v-955009fc]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-955009fc]{justify-content:center}@media (min-width: 640px){.actions[data-v-955009fc]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-955009fc]{justify-content:flex-start}}.action[data-v-955009fc]{flex-shrink:0;padding:6px}.image[data-v-955009fc]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-955009fc]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-955009fc]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-955009fc]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-955009fc]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-955009fc]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-955009fc]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-955009fc]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-955009fc]{width:320px;height:320px}}[data-v-955009fc] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-955009fc] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-955009fc] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f5e9645b]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f5e9645b]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-f5e9645b]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-f5e9645b]>.VPImage{margin-bottom:20px}.icon[data-v-f5e9645b]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f5e9645b]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f5e9645b]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f5e9645b]{padding-top:8px}.link-text-value[data-v-f5e9645b]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-f5e9645b]{margin-left:6px}.VPFeatures[data-v-d0a190d7]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-d0a190d7]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-d0a190d7]{padding:0 64px}}.container[data-v-d0a190d7]{margin:0 auto;max-width:1152px}.items[data-v-d0a190d7]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-d0a190d7]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7]{width:50%}.item.grid-3[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-d0a190d7]{width:25%}}.container[data-v-7a48a447]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-7a48a447]{padding:0 48px}}@media (min-width: 960px){.container[data-v-7a48a447]{width:100%;padding:0 64px}}.vp-doc[data-v-7a48a447] .VPHomeSponsors,.vp-doc[data-v-7a48a447] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-7a48a447] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-7a48a447] .VPHomeSponsors a,.vp-doc[data-v-7a48a447] .VPTeamPage a{text-decoration:none}.VPHome[data-v-cbb6ec48]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-cbb6ec48]{margin-bottom:128px}}.VPContent[data-v-91765379]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91765379]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91765379]{margin:0}@media (min-width: 960px){.VPContent[data-v-91765379]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91765379]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91765379]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c970a860]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c970a860]{display:none}.VPFooter[data-v-c970a860] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c970a860] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-c970a860]{padding:32px}}.container[data-v-c970a860]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c970a860],.copyright[data-v-c970a860]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-bc9dc845]{color:var(--vp-c-text-1)}.icon[data-v-bc9dc845]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{font-size:14px}.icon[data-v-bc9dc845]{font-size:16px}}.open>.icon[data-v-bc9dc845]{transform:rotate(90deg)}.items[data-v-bc9dc845]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-bc9dc845]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-bc9dc845]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-bc9dc845]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-bc9dc845]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-bc9dc845]{transition:all .2s ease-out}.flyout-leave-active[data-v-bc9dc845]{transition:all .15s ease-in}.flyout-enter-from[data-v-bc9dc845],.flyout-leave-to[data-v-bc9dc845]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-070ab83d]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-070ab83d]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-070ab83d]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-070ab83d]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-070ab83d]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-070ab83d]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-070ab83d]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-070ab83d]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-070ab83d]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-070ab83d]{display:none}}.menu-icon[data-v-070ab83d]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-070ab83d]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-070ab83d]{padding:12px 32px 11px}}.VPSwitch[data-v-4a1c76db]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-4a1c76db]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-4a1c76db]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-4a1c76db]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4a1c76db] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-4a1c76db] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e40a8bb6]{opacity:1}.moon[data-v-e40a8bb6],.dark .sun[data-v-e40a8bb6]{opacity:0}.dark .moon[data-v-e40a8bb6]{opacity:1}.dark .VPSwitchAppearance[data-v-e40a8bb6] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-af096f4a]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-af096f4a]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-8b74d055]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-8b74d055]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-8b74d055]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-8b74d055]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-48c802d0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-48c802d0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-48c802d0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-48c802d0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-7dd3104a]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-7dd3104a] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7dd3104a] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7dd3104a] .group:last-child{padding-bottom:0}.VPMenu[data-v-7dd3104a] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7dd3104a] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7dd3104a] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-7dd3104a] .action{padding-left:24px}.VPFlyout[data-v-e5380155]{position:relative}.VPFlyout[data-v-e5380155]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-e5380155]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-e5380155]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-e5380155]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-e5380155]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-e5380155],.button[aria-expanded=true]+.menu[data-v-e5380155]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-e5380155]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-e5380155]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-e5380155]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-e5380155]{margin-right:0;font-size:16px}.text-icon[data-v-e5380155]{margin-left:4px;font-size:14px}.icon[data-v-e5380155]{font-size:20px;transition:fill .25s}.menu[data-v-e5380155]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-717b8b75]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-717b8b75]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-717b8b75]>svg,.VPSocialLink[data-v-717b8b75]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ee7a9424]{display:flex;justify-content:center}.VPNavBarExtra[data-v-925effce]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-925effce]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-925effce]{display:none}}.trans-title[data-v-925effce]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-925effce],.item.social-links[data-v-925effce]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-925effce]{min-width:176px}.appearance-action[data-v-925effce]{margin-right:-2px}.social-links-list[data-v-925effce]{margin:-4px -8px}.VPNavBarHamburger[data-v-5dea55bf]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-5dea55bf]{display:none}}.container[data-v-5dea55bf]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-5dea55bf]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-5dea55bf]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-5dea55bf],.VPNavBarHamburger.active:hover .middle[data-v-5dea55bf],.VPNavBarHamburger.active:hover .bottom[data-v-5dea55bf]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-5dea55bf],.middle[data-v-5dea55bf],.bottom[data-v-5dea55bf]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-5dea55bf]{top:0;left:0;transform:translate(0)}.middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-ed5ac1f6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-ed5ac1f6],.VPNavBarMenuLink[data-v-ed5ac1f6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-e6d46098]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-e6d46098]{display:flex}}/*! @docsearch/css 3.6.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-164c457f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-164c457f]{display:flex;align-items:center}}.title[data-v-28a961f9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-28a961f9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-28a961f9]{border-bottom-color:var(--vp-c-divider)}}[data-v-28a961f9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-c80d9ad0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-c80d9ad0]{display:flex;align-items:center}}.title[data-v-c80d9ad0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-822684d1]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-822684d1]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-822684d1]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-822684d1]:not(.home){background-color:transparent}.VPNavBar[data-v-822684d1]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-822684d1]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-822684d1]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-822684d1]{padding:0}}.container[data-v-822684d1]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-822684d1],.container>.content[data-v-822684d1]{pointer-events:none}.container[data-v-822684d1] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-822684d1]{max-width:100%}}.title[data-v-822684d1]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-822684d1]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-822684d1]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-822684d1]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-822684d1]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-822684d1]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-822684d1]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-822684d1]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-822684d1]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-822684d1]{column-gap:.5rem}}.menu+.translations[data-v-822684d1]:before,.menu+.appearance[data-v-822684d1]:before,.menu+.social-links[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before,.appearance+.social-links[data-v-822684d1]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before{margin-right:16px}.appearance+.social-links[data-v-822684d1]:before{margin-left:16px}.social-links[data-v-822684d1]{margin-right:-8px}.divider[data-v-822684d1]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-822684d1]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-822684d1]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-ffb44008]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-ffb44008]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-27d04aeb]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-27d04aeb]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-7179dbb7]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-7179dbb7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b8941ac]{display:block}.title[data-v-4b8941ac]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-875057a5]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-875057a5]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-875057a5]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-875057a5]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-875057a5]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-875057a5]{transform:rotate(45deg)}.button[data-v-875057a5]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-875057a5]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-875057a5]{transition:transform .25s}.group[data-v-875057a5]:first-child{padding-top:0}.group+.group[data-v-875057a5],.group+.item[data-v-875057a5]{padding-top:4px}.VPNavScreenTranslations[data-v-362991c2]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-362991c2]{height:auto}.title[data-v-362991c2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-362991c2]{font-size:16px}.icon.lang[data-v-362991c2]{margin-right:8px}.icon.chevron[data-v-362991c2]{margin-left:4px}.list[data-v-362991c2]{padding:4px 0 0 24px}.link[data-v-362991c2]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-833aabba]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-833aabba],.VPNavScreen.fade-leave-active[data-v-833aabba]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-833aabba],.VPNavScreen.fade-leave-active .container[data-v-833aabba]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-833aabba],.VPNavScreen.fade-leave-to[data-v-833aabba]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-833aabba],.VPNavScreen.fade-leave-to .container[data-v-833aabba]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-833aabba]{display:none}}.container[data-v-833aabba]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-833aabba],.menu+.appearance[data-v-833aabba],.translations+.appearance[data-v-833aabba]{margin-top:24px}.menu+.social-links[data-v-833aabba]{margin-top:16px}.appearance+.social-links[data-v-833aabba]{margin-top:16px}.VPNav[data-v-f1e365da]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-f1e365da]{position:fixed}}.VPSidebarItem.level-0[data-v-196b2e5f]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-196b2e5f]{padding-bottom:10px}.item[data-v-196b2e5f]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-196b2e5f]{cursor:pointer}.indicator[data-v-196b2e5f]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-196b2e5f]{background-color:var(--vp-c-brand-1)}.link[data-v-196b2e5f]{display:flex;align-items:center;flex-grow:1}.text[data-v-196b2e5f]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-196b2e5f]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-196b2e5f],.VPSidebarItem.level-2 .text[data-v-196b2e5f],.VPSidebarItem.level-3 .text[data-v-196b2e5f],.VPSidebarItem.level-4 .text[data-v-196b2e5f],.VPSidebarItem.level-5 .text[data-v-196b2e5f]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-196b2e5f]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.caret[data-v-196b2e5f]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-196b2e5f]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-196b2e5f]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-196b2e5f]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-196b2e5f]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-196b2e5f],.VPSidebarItem.level-2 .items[data-v-196b2e5f],.VPSidebarItem.level-3 .items[data-v-196b2e5f],.VPSidebarItem.level-4 .items[data-v-196b2e5f],.VPSidebarItem.level-5 .items[data-v-196b2e5f]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-196b2e5f]{display:none}.no-transition[data-v-9e426adc] .caret-icon{transition:none}.group+.group[data-v-9e426adc]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-9e426adc]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-18756405]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-18756405]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-18756405]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-18756405]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-18756405]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-18756405]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-18756405]{outline:0}.VPSkipLink[data-v-c3508ec8]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c3508ec8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c3508ec8]{top:14px;left:16px}}.Layout[data-v-a9a9e638]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-db81191c]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-db81191c]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{margin:128px 0}}.VPHomeSponsors[data-v-db81191c]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-db81191c]{padding:0 64px}}.container[data-v-db81191c]{margin:0 auto;max-width:1152px}.love[data-v-db81191c]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-db81191c]{display:inline-block}.message[data-v-db81191c]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-db81191c]{padding-top:32px}.action[data-v-db81191c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-c2f8e101]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c2f8e101]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c2f8e101-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c2f8e101-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:96px}}.VPTeamMembers[data-v-c2f8e101-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e277e15c]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e277e15c]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e277e15c]{padding:80px 64px 48px}}.title[data-v-e277e15c]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e277e15c]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e277e15c]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e277e15c]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-d43bc49d]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 64px}}.title[data-v-d43bc49d]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-d43bc49d]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-d43bc49d]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-d43bc49d]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-d43bc49d]{padding-top:40px}.VPTeamMembersItem[data-v-f9987cb6]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f9987cb6]{padding:32px}.VPTeamMembersItem.small .data[data-v-f9987cb6]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f9987cb6]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f9987cb6]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f9987cb6]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f9987cb6]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f9987cb6]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f9987cb6]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f9987cb6]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f9987cb6]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f9987cb6]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f9987cb6]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f9987cb6]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f9987cb6]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f9987cb6]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f9987cb6]{text-align:center}.avatar[data-v-f9987cb6]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f9987cb6]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f9987cb6]{margin:0;font-weight:600}.affiliation[data-v-f9987cb6]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f9987cb6]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f9987cb6]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f9987cb6]{margin:0 auto}.desc[data-v-f9987cb6] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f9987cb6]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f9987cb6]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f9987cb6]:hover,.sp .sp-link.link[data-v-f9987cb6]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f9987cb6]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-fba19bad]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-fba19bad]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-fba19bad]{max-width:876px}.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-fba19bad]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-fba19bad]{max-width:760px}.container[data-v-fba19bad]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-9b0d03d2]{padding:16px}.plugin-tabs--content[data-v-9b0d03d2]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-9b0d03d2]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-9b0d03d2]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-9b0d03d2] div[class*=language-]{background-color:var(--vp-c-bg)}.VPHero .clip{white-space:pre;max-width:500px}:root{--vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New", monospace}:root{--c-yellow-1: #ffd859;--c-yellow-2: #f7d336;--c-yellow-3: #dec96e;--c-yellow-soft-1: #ecb732;--c-yellow-soft-2: #c99513;--c-teal: #086367;--c-teal-light: #33898d;--c-white-dark: #f8f8f8;--c-black-darker: #0d121b;--c-black: #111827;--c-black-light: #161f32;--c-black-lighter: #262a44;--c-green-1: #52ce63;--c-green-2: #8ae99c;--c-green-3: #51a256;--c-green-soft: #316334;--vp-c-brand-1: var(--vp-c-green-1);--vp-c-brand-2: var(--vp-c-green-2);--vp-c-brand-3: var(--vp-c-green-3);--vp-c-brand-soft: var(--vp-c-green-soft);--c-text-dark-1: #d9e6eb;--c-text-dark-2: #c4dde6;--c-text-dark-3: #abc4cc;--c-text-light-1: #2c3e50;--c-text-light-2: #476582;--c-text-light-3: #90a4b7;--vp-c-brand-dark: var(--c-green-soft);--vp-c-brand-darker: var(--c-green-soft);--vp-c-brand-dimm: rgba(100, 108, 255, .08);--vp-c-brand-text: var(--c-text-light-1);--c-bg-accent: var(--c-white-dark);--code-bg-color: var(--c-white-dark);--code-inline-bg-color: var(--c-white-dark);--code-font-family: "dm", source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;--code-font-size: 16px;--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-line-highlight-color: rgba(0, 0, 0, .075);--vp-code-color: var(--vp-text-color)}html.dark:root{--vp-c-brand-1: var(--c-yellow-1);--vp-c-brand-2: var(--c-yellow-2);--vp-c-brand-3: var(--c-yellow-3);--vp-c-bg-alpha-with-backdrop: rgba(20, 25, 36, .7);--vp-c-bg-alpha-without-backdrop: rgba(20, 25, 36, .9);--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-c-text-1: var(--c-text-dark-1);--vp-c-brand-text: var(--c-text-light-1);--c-text-light: var(--c-text-dark-2);--c-text-lighter: var(--c-text-dark-3);--c-divider: var(--c-divider-dark);--c-bg-accent: var(--c-black-light);--vp-c-bg: var(--c-black);--vp-c-bg-soft: var(--c-black-light);--vp-c-bg-soft-up: var(--c-black-lighter);--vp-c-bg-mute: var(--c-black-light);--vp-c-bg-soft-mute: var(--c-black-lighter);--vp-c-bg-alt: #0d121b;--vp-c-bg-elv: var(--vp-c-bg-soft);--vp-c-bg-elv-mute: var(--vp-c-bg-soft-mute);--vp-c-mute: var(--vp-c-bg-mute);--vp-c-mute-dark: var(--c-black-lighter);--vp-c-mute-darker: var(--c-black-darker);--vp-home-hero-name-background: -webkit-linear-gradient(78deg, var(--c-yellow-2) 30%, var(--c-green-3))}html.dark .DocSearch{--docsearch-hit-active-color: var(--c-text-light-1)}:root{--vp-button-brand-border: var(--c-yellow-soft-1);--vp-button-brand-text: var(--c-black);--vp-button-brand-bg: var(--c-yellow-1);--vp-button-brand-hover-border: var(--c-yellow-2);--vp-button-brand-hover-text: var(--c-black-darker);--vp-button-brand-hover-bg: var(--c-yellow-2);--vp-button-brand-active-border: var(--c-yellow-soft-1);--vp-button-brand-active-text: var(--c-black-darker);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: linear-gradient(292deg, var(--c-text-light-2) 50%, var(--c-green-2));--vp-home-hero-image-background-image: linear-gradient(15deg, var(--c-yellow-2) 35%, var(--c-text-light-2) 15%);--vp-home-hero-image-filter: blur(40px)}.VPHero .VPImage.image-src{max-height:192px}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}.VPHero .VPImage.image-src{max-height:256px}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}.VPHero .VPImage.image-src{max-height:320px}}.become-sponsor{font-size:.9em;font-weight:700;width:auto;text-align:center;background-color:transparent;padding:.75em 2em;border-radius:2em;transition:all .15s ease;box-sizing:border-box;border:2px solid var(--c-yellow-2)}.become-sponsor:hover{background-color:var(--c-yellow-1);text-decoration:none;border-color:var(--c-yellow-1);color:var(--c-text-light-1)}.vp-doc a{text-decoration:none}.vp-doc a:hover{text-decoration:underline}.sponsors-top .become-sponsor{font-size:.75em;padding:.2em;width:auto;max-width:150px}kbd{display:inline-block;padding:3px 5px;font-size:.65em;color:var(--vp-c-text-1);vertical-align:middle;background-color:var(--vp-c-bg-mute);border:solid 1px var(--vp-c-bg-soft-mute);border-radius:6px;box-shadow:inset 0 -1px 0 var(--vp-c-bg-soft-mute);line-height:.95em}.VPLocalSearchBox[data-v-5b749456]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-5b749456]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-5b749456]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-5b749456]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-5b749456]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-5b749456]{padding:0 8px}}.search-bar[data-v-5b749456]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-5b749456]{display:block;font-size:18px}.navigate-icon[data-v-5b749456]{display:block;font-size:14px}.search-icon[data-v-5b749456]{margin:8px}@media (max-width: 767px){.search-icon[data-v-5b749456]{display:none}}.search-input[data-v-5b749456]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-5b749456]{padding:6px 4px}}.search-actions[data-v-5b749456]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-5b749456]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-5b749456]{display:none}}.search-actions button[data-v-5b749456]{padding:8px}.search-actions button[data-v-5b749456]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-5b749456]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-5b749456]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-5b749456]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-5b749456]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-5b749456]{display:none}}.search-keyboard-shortcuts kbd[data-v-5b749456]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-5b749456]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-5b749456]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-5b749456]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-5b749456]{margin:8px}}.titles[data-v-5b749456]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-5b749456]{display:flex;align-items:center;gap:4px}.title.main[data-v-5b749456]{font-weight:500}.title-icon[data-v-5b749456]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-5b749456]{opacity:.5}.result.selected[data-v-5b749456]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-5b749456]{position:relative}.excerpt[data-v-5b749456]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-5b749456]{opacity:1}.excerpt[data-v-5b749456] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-5b749456] mark,.excerpt[data-v-5b749456] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-5b749456] .vp-code-group .tabs{display:none}.excerpt[data-v-5b749456] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-5b749456]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-5b749456]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-5b749456],.result.selected .title-icon[data-v-5b749456]{color:var(--vp-c-brand-1)!important}.no-results[data-v-5b749456]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-5b749456]{flex:none} +@import"https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic";@import"https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic";@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/ReefGuideAPI.jl/dev/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b06cdb19]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-b06cdb19],.VPBackdrop.fade-leave-to[data-v-b06cdb19]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b06cdb19]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b06cdb19]{display:none}}.NotFound[data-v-951cab6c]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-951cab6c]{padding:96px 32px 168px}}.code[data-v-951cab6c]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-951cab6c]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-951cab6c]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-951cab6c]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-951cab6c]{padding-top:20px}.link[data-v-951cab6c]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-951cab6c]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3f927ebe]{position:relative;z-index:1}.nested[data-v-3f927ebe]{padding-right:16px;padding-left:16px}.outline-link[data-v-3f927ebe]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3f927ebe]:hover,.outline-link.active[data-v-3f927ebe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3f927ebe]{padding-left:13px}.VPDocAsideOutline[data-v-b38bf2ff]{display:none}.VPDocAsideOutline.has-outline[data-v-b38bf2ff]{display:block}.content[data-v-b38bf2ff]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-b38bf2ff]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-b38bf2ff]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-6d7b3c46]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6d7b3c46]{flex-grow:1}.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6d7b3c46] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-475f71b8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-475f71b8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-4f9813fa]{margin-top:64px}.edit-info[data-v-4f9813fa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-4f9813fa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-4f9813fa]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-4f9813fa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-4f9813fa]{margin-right:8px}.prev-next[data-v-4f9813fa]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-4f9813fa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-4f9813fa]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-4f9813fa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-4f9813fa]{margin-left:auto;text-align:right}.desc[data-v-4f9813fa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-4f9813fa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-83890dd9]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-83890dd9]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-83890dd9]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-83890dd9]{display:flex;justify-content:center}.VPDoc .aside[data-v-83890dd9]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{max-width:1104px}}.container[data-v-83890dd9]{margin:0 auto;width:100%}.aside[data-v-83890dd9]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-83890dd9]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-83890dd9]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-83890dd9]::-webkit-scrollbar{display:none}.aside-curtain[data-v-83890dd9]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-83890dd9]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-83890dd9]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-83890dd9]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-83890dd9]{order:1;margin:0;min-width:640px}}.content-container[data-v-83890dd9]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-83890dd9]{max-width:688px}.VPButton[data-v-906d7fb4]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-906d7fb4]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-906d7fb4]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-906d7fb4]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-906d7fb4]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-906d7fb4]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-906d7fb4]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-906d7fb4]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-906d7fb4]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-906d7fb4]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-906d7fb4]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-906d7fb4]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-906d7fb4]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-35a7d0b8]{display:none}.dark .VPImage.light[data-v-35a7d0b8]{display:none}.VPHero[data-v-955009fc]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-955009fc]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-955009fc]{flex-direction:row}}.main[data-v-955009fc]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-955009fc]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-955009fc]{text-align:left}}@media (min-width: 960px){.main[data-v-955009fc]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-955009fc]{max-width:592px}}.name[data-v-955009fc],.text[data-v-955009fc]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0 auto}.name[data-v-955009fc]{color:var(--vp-home-hero-name-color)}.clip[data-v-955009fc]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-955009fc],.text[data-v-955009fc]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-955009fc],.text[data-v-955009fc]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0}}.tagline[data-v-955009fc]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-955009fc]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-955009fc]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-955009fc]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-955009fc]{margin:0}}.actions[data-v-955009fc]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-955009fc]{justify-content:center}@media (min-width: 640px){.actions[data-v-955009fc]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-955009fc]{justify-content:flex-start}}.action[data-v-955009fc]{flex-shrink:0;padding:6px}.image[data-v-955009fc]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-955009fc]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-955009fc]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-955009fc]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-955009fc]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-955009fc]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-955009fc]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-955009fc]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-955009fc]{width:320px;height:320px}}[data-v-955009fc] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-955009fc] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-955009fc] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f5e9645b]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f5e9645b]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-f5e9645b]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-f5e9645b]>.VPImage{margin-bottom:20px}.icon[data-v-f5e9645b]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f5e9645b]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f5e9645b]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f5e9645b]{padding-top:8px}.link-text-value[data-v-f5e9645b]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-f5e9645b]{margin-left:6px}.VPFeatures[data-v-d0a190d7]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-d0a190d7]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-d0a190d7]{padding:0 64px}}.container[data-v-d0a190d7]{margin:0 auto;max-width:1152px}.items[data-v-d0a190d7]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-d0a190d7]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7]{width:50%}.item.grid-3[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-d0a190d7]{width:25%}}.container[data-v-7a48a447]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-7a48a447]{padding:0 48px}}@media (min-width: 960px){.container[data-v-7a48a447]{width:100%;padding:0 64px}}.vp-doc[data-v-7a48a447] .VPHomeSponsors,.vp-doc[data-v-7a48a447] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-7a48a447] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-7a48a447] .VPHomeSponsors a,.vp-doc[data-v-7a48a447] .VPTeamPage a{text-decoration:none}.VPHome[data-v-cbb6ec48]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-cbb6ec48]{margin-bottom:128px}}.VPContent[data-v-91765379]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91765379]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91765379]{margin:0}@media (min-width: 960px){.VPContent[data-v-91765379]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91765379]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91765379]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c970a860]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c970a860]{display:none}.VPFooter[data-v-c970a860] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c970a860] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-c970a860]{padding:32px}}.container[data-v-c970a860]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c970a860],.copyright[data-v-c970a860]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-bc9dc845]{color:var(--vp-c-text-1)}.icon[data-v-bc9dc845]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{font-size:14px}.icon[data-v-bc9dc845]{font-size:16px}}.open>.icon[data-v-bc9dc845]{transform:rotate(90deg)}.items[data-v-bc9dc845]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-bc9dc845]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-bc9dc845]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-bc9dc845]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-bc9dc845]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-bc9dc845]{transition:all .2s ease-out}.flyout-leave-active[data-v-bc9dc845]{transition:all .15s ease-in}.flyout-enter-from[data-v-bc9dc845],.flyout-leave-to[data-v-bc9dc845]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-070ab83d]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-070ab83d]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-070ab83d]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-070ab83d]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-070ab83d]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-070ab83d]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-070ab83d]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-070ab83d]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-070ab83d]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-070ab83d]{display:none}}.menu-icon[data-v-070ab83d]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-070ab83d]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-070ab83d]{padding:12px 32px 11px}}.VPSwitch[data-v-4a1c76db]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-4a1c76db]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-4a1c76db]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-4a1c76db]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4a1c76db] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-4a1c76db] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e40a8bb6]{opacity:1}.moon[data-v-e40a8bb6],.dark .sun[data-v-e40a8bb6]{opacity:0}.dark .moon[data-v-e40a8bb6]{opacity:1}.dark .VPSwitchAppearance[data-v-e40a8bb6] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-af096f4a]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-af096f4a]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-8b74d055]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-8b74d055]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-8b74d055]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-8b74d055]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-48c802d0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-48c802d0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-48c802d0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-48c802d0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-7dd3104a]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-7dd3104a] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7dd3104a] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7dd3104a] .group:last-child{padding-bottom:0}.VPMenu[data-v-7dd3104a] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7dd3104a] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7dd3104a] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-7dd3104a] .action{padding-left:24px}.VPFlyout[data-v-04f5c5e9]{position:relative}.VPFlyout[data-v-04f5c5e9]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-04f5c5e9]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-04f5c5e9]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-04f5c5e9]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-04f5c5e9]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-04f5c5e9]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-04f5c5e9],.button[aria-expanded=true]+.menu[data-v-04f5c5e9]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-04f5c5e9]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-04f5c5e9]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-04f5c5e9]{margin-right:0;font-size:16px}.text-icon[data-v-04f5c5e9]{margin-left:4px;font-size:14px}.icon[data-v-04f5c5e9]{font-size:20px;transition:fill .25s}.menu[data-v-04f5c5e9]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-717b8b75]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-717b8b75]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-717b8b75]>svg,.VPSocialLink[data-v-717b8b75]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ee7a9424]{display:flex;justify-content:center}.VPNavBarExtra[data-v-925effce]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-925effce]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-925effce]{display:none}}.trans-title[data-v-925effce]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-925effce],.item.social-links[data-v-925effce]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-925effce]{min-width:176px}.appearance-action[data-v-925effce]{margin-right:-2px}.social-links-list[data-v-925effce]{margin:-4px -8px}.VPNavBarHamburger[data-v-5dea55bf]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-5dea55bf]{display:none}}.container[data-v-5dea55bf]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-5dea55bf]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-5dea55bf]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-5dea55bf],.VPNavBarHamburger.active:hover .middle[data-v-5dea55bf],.VPNavBarHamburger.active:hover .bottom[data-v-5dea55bf]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-5dea55bf],.middle[data-v-5dea55bf],.bottom[data-v-5dea55bf]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-5dea55bf]{top:0;left:0;transform:translate(0)}.middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-ed5ac1f6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-ed5ac1f6],.VPNavBarMenuLink[data-v-ed5ac1f6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-e6d46098]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-e6d46098]{display:flex}}/*! @docsearch/css 3.6.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-164c457f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-164c457f]{display:flex;align-items:center}}.title[data-v-28a961f9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-28a961f9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-28a961f9]{border-bottom-color:var(--vp-c-divider)}}[data-v-28a961f9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-c80d9ad0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-c80d9ad0]{display:flex;align-items:center}}.title[data-v-c80d9ad0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-822684d1]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-822684d1]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-822684d1]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-822684d1]:not(.home){background-color:transparent}.VPNavBar[data-v-822684d1]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-822684d1]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-822684d1]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-822684d1]{padding:0}}.container[data-v-822684d1]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-822684d1],.container>.content[data-v-822684d1]{pointer-events:none}.container[data-v-822684d1] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-822684d1]{max-width:100%}}.title[data-v-822684d1]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-822684d1]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-822684d1]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-822684d1]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-822684d1]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-822684d1]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-822684d1]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-822684d1]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-822684d1]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-822684d1]{column-gap:.5rem}}.menu+.translations[data-v-822684d1]:before,.menu+.appearance[data-v-822684d1]:before,.menu+.social-links[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before,.appearance+.social-links[data-v-822684d1]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before{margin-right:16px}.appearance+.social-links[data-v-822684d1]:before{margin-left:16px}.social-links[data-v-822684d1]{margin-right:-8px}.divider[data-v-822684d1]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-822684d1]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-822684d1]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-ffb44008]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-ffb44008]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-27d04aeb]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-27d04aeb]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-7179dbb7]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-7179dbb7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b8941ac]{display:block}.title[data-v-4b8941ac]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-875057a5]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-875057a5]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-875057a5]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-875057a5]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-875057a5]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-875057a5]{transform:rotate(45deg)}.button[data-v-875057a5]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-875057a5]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-875057a5]{transition:transform .25s}.group[data-v-875057a5]:first-child{padding-top:0}.group+.group[data-v-875057a5],.group+.item[data-v-875057a5]{padding-top:4px}.VPNavScreenTranslations[data-v-362991c2]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-362991c2]{height:auto}.title[data-v-362991c2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-362991c2]{font-size:16px}.icon.lang[data-v-362991c2]{margin-right:8px}.icon.chevron[data-v-362991c2]{margin-left:4px}.list[data-v-362991c2]{padding:4px 0 0 24px}.link[data-v-362991c2]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-833aabba]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-833aabba],.VPNavScreen.fade-leave-active[data-v-833aabba]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-833aabba],.VPNavScreen.fade-leave-active .container[data-v-833aabba]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-833aabba],.VPNavScreen.fade-leave-to[data-v-833aabba]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-833aabba],.VPNavScreen.fade-leave-to .container[data-v-833aabba]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-833aabba]{display:none}}.container[data-v-833aabba]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-833aabba],.menu+.appearance[data-v-833aabba],.translations+.appearance[data-v-833aabba]{margin-top:24px}.menu+.social-links[data-v-833aabba]{margin-top:16px}.appearance+.social-links[data-v-833aabba]{margin-top:16px}.VPNav[data-v-f1e365da]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-f1e365da]{position:fixed}}.VPSidebarItem.level-0[data-v-196b2e5f]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-196b2e5f]{padding-bottom:10px}.item[data-v-196b2e5f]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-196b2e5f]{cursor:pointer}.indicator[data-v-196b2e5f]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-196b2e5f]{background-color:var(--vp-c-brand-1)}.link[data-v-196b2e5f]{display:flex;align-items:center;flex-grow:1}.text[data-v-196b2e5f]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-196b2e5f]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-196b2e5f],.VPSidebarItem.level-2 .text[data-v-196b2e5f],.VPSidebarItem.level-3 .text[data-v-196b2e5f],.VPSidebarItem.level-4 .text[data-v-196b2e5f],.VPSidebarItem.level-5 .text[data-v-196b2e5f]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-196b2e5f]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.caret[data-v-196b2e5f]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-196b2e5f]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-196b2e5f]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-196b2e5f]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-196b2e5f]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-196b2e5f],.VPSidebarItem.level-2 .items[data-v-196b2e5f],.VPSidebarItem.level-3 .items[data-v-196b2e5f],.VPSidebarItem.level-4 .items[data-v-196b2e5f],.VPSidebarItem.level-5 .items[data-v-196b2e5f]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-196b2e5f]{display:none}.no-transition[data-v-9e426adc] .caret-icon{transition:none}.group+.group[data-v-9e426adc]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-9e426adc]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-18756405]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-18756405]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-18756405]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-18756405]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-18756405]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-18756405]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-18756405]{outline:0}.VPSkipLink[data-v-c3508ec8]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c3508ec8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c3508ec8]{top:14px;left:16px}}.Layout[data-v-a9a9e638]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-db81191c]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-db81191c]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{margin:128px 0}}.VPHomeSponsors[data-v-db81191c]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-db81191c]{padding:0 64px}}.container[data-v-db81191c]{margin:0 auto;max-width:1152px}.love[data-v-db81191c]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-db81191c]{display:inline-block}.message[data-v-db81191c]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-db81191c]{padding-top:32px}.action[data-v-db81191c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-c2f8e101]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c2f8e101]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c2f8e101-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c2f8e101-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:96px}}.VPTeamMembers[data-v-c2f8e101-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e277e15c]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e277e15c]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e277e15c]{padding:80px 64px 48px}}.title[data-v-e277e15c]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e277e15c]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e277e15c]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e277e15c]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-d43bc49d]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 64px}}.title[data-v-d43bc49d]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-d43bc49d]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-d43bc49d]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-d43bc49d]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-d43bc49d]{padding-top:40px}.VPTeamMembersItem[data-v-f9987cb6]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f9987cb6]{padding:32px}.VPTeamMembersItem.small .data[data-v-f9987cb6]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f9987cb6]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f9987cb6]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f9987cb6]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f9987cb6]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f9987cb6]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f9987cb6]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f9987cb6]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f9987cb6]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f9987cb6]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f9987cb6]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f9987cb6]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f9987cb6]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f9987cb6]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f9987cb6]{text-align:center}.avatar[data-v-f9987cb6]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f9987cb6]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f9987cb6]{margin:0;font-weight:600}.affiliation[data-v-f9987cb6]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f9987cb6]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f9987cb6]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f9987cb6]{margin:0 auto}.desc[data-v-f9987cb6] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f9987cb6]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f9987cb6]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f9987cb6]:hover,.sp .sp-link.link[data-v-f9987cb6]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f9987cb6]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-fba19bad]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-fba19bad]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-fba19bad]{max-width:876px}.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-fba19bad]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-fba19bad]{max-width:760px}.container[data-v-fba19bad]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-9b0d03d2]{padding:16px}.plugin-tabs--content[data-v-9b0d03d2]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-9b0d03d2]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-9b0d03d2]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-9b0d03d2] div[class*=language-]{background-color:var(--vp-c-bg)}.VPHero .clip{white-space:pre;max-width:500px}:root{--vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New", monospace}:root{--c-yellow-1: #ffd859;--c-yellow-2: #f7d336;--c-yellow-3: #dec96e;--c-yellow-soft-1: #ecb732;--c-yellow-soft-2: #c99513;--c-teal: #086367;--c-teal-light: #33898d;--c-white-dark: #f8f8f8;--c-black-darker: #0d121b;--c-black: #111827;--c-black-light: #161f32;--c-black-lighter: #262a44;--c-green-1: #52ce63;--c-green-2: #8ae99c;--c-green-3: #51a256;--c-green-soft: #316334;--vp-c-brand-1: var(--vp-c-green-1);--vp-c-brand-2: var(--vp-c-green-2);--vp-c-brand-3: var(--vp-c-green-3);--vp-c-brand-soft: var(--vp-c-green-soft);--c-text-dark-1: #d9e6eb;--c-text-dark-2: #c4dde6;--c-text-dark-3: #abc4cc;--c-text-light-1: #2c3e50;--c-text-light-2: #476582;--c-text-light-3: #90a4b7;--vp-c-brand-dark: var(--c-green-soft);--vp-c-brand-darker: var(--c-green-soft);--vp-c-brand-dimm: rgba(100, 108, 255, .08);--vp-c-brand-text: var(--c-text-light-1);--c-bg-accent: var(--c-white-dark);--code-bg-color: var(--c-white-dark);--code-inline-bg-color: var(--c-white-dark);--code-font-family: "dm", source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;--code-font-size: 16px;--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-line-highlight-color: rgba(0, 0, 0, .075);--vp-code-color: var(--vp-text-color)}html.dark:root{--vp-c-brand-1: var(--c-yellow-1);--vp-c-brand-2: var(--c-yellow-2);--vp-c-brand-3: var(--c-yellow-3);--vp-c-bg-alpha-with-backdrop: rgba(20, 25, 36, .7);--vp-c-bg-alpha-without-backdrop: rgba(20, 25, 36, .9);--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-c-text-1: var(--c-text-dark-1);--vp-c-brand-text: var(--c-text-light-1);--c-text-light: var(--c-text-dark-2);--c-text-lighter: var(--c-text-dark-3);--c-divider: var(--c-divider-dark);--c-bg-accent: var(--c-black-light);--vp-c-bg: var(--c-black);--vp-c-bg-soft: var(--c-black-light);--vp-c-bg-soft-up: var(--c-black-lighter);--vp-c-bg-mute: var(--c-black-light);--vp-c-bg-soft-mute: var(--c-black-lighter);--vp-c-bg-alt: #0d121b;--vp-c-bg-elv: var(--vp-c-bg-soft);--vp-c-bg-elv-mute: var(--vp-c-bg-soft-mute);--vp-c-mute: var(--vp-c-bg-mute);--vp-c-mute-dark: var(--c-black-lighter);--vp-c-mute-darker: var(--c-black-darker);--vp-home-hero-name-background: -webkit-linear-gradient(78deg, var(--c-yellow-2) 30%, var(--c-green-3))}html.dark .DocSearch{--docsearch-hit-active-color: var(--c-text-light-1)}:root{--vp-button-brand-border: var(--c-yellow-soft-1);--vp-button-brand-text: var(--c-black);--vp-button-brand-bg: var(--c-yellow-1);--vp-button-brand-hover-border: var(--c-yellow-2);--vp-button-brand-hover-text: var(--c-black-darker);--vp-button-brand-hover-bg: var(--c-yellow-2);--vp-button-brand-active-border: var(--c-yellow-soft-1);--vp-button-brand-active-text: var(--c-black-darker);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: linear-gradient(292deg, var(--c-text-light-2) 50%, var(--c-green-2));--vp-home-hero-image-background-image: linear-gradient(15deg, var(--c-yellow-2) 35%, var(--c-text-light-2) 15%);--vp-home-hero-image-filter: blur(40px)}.VPHero .VPImage.image-src{max-height:192px}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}.VPHero .VPImage.image-src{max-height:256px}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}.VPHero .VPImage.image-src{max-height:320px}}.become-sponsor{font-size:.9em;font-weight:700;width:auto;text-align:center;background-color:transparent;padding:.75em 2em;border-radius:2em;transition:all .15s ease;box-sizing:border-box;border:2px solid var(--c-yellow-2)}.become-sponsor:hover{background-color:var(--c-yellow-1);text-decoration:none;border-color:var(--c-yellow-1);color:var(--c-text-light-1)}.vp-doc a{text-decoration:none}.vp-doc a:hover{text-decoration:underline}.sponsors-top .become-sponsor{font-size:.75em;padding:.2em;width:auto;max-width:150px}kbd{display:inline-block;padding:3px 5px;font-size:.65em;color:var(--vp-c-text-1);vertical-align:middle;background-color:var(--vp-c-bg-mute);border:solid 1px var(--vp-c-bg-soft-mute);border-radius:6px;box-shadow:inset 0 -1px 0 var(--vp-c-bg-soft-mute);line-height:.95em}.VPLocalSearchBox[data-v-5b749456]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-5b749456]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-5b749456]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-5b749456]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-5b749456]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-5b749456]{padding:0 8px}}.search-bar[data-v-5b749456]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-5b749456]{display:block;font-size:18px}.navigate-icon[data-v-5b749456]{display:block;font-size:14px}.search-icon[data-v-5b749456]{margin:8px}@media (max-width: 767px){.search-icon[data-v-5b749456]{display:none}}.search-input[data-v-5b749456]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-5b749456]{padding:6px 4px}}.search-actions[data-v-5b749456]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-5b749456]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-5b749456]{display:none}}.search-actions button[data-v-5b749456]{padding:8px}.search-actions button[data-v-5b749456]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-5b749456]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-5b749456]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-5b749456]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-5b749456]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-5b749456]{display:none}}.search-keyboard-shortcuts kbd[data-v-5b749456]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-5b749456]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-5b749456]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-5b749456]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-5b749456]{margin:8px}}.titles[data-v-5b749456]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-5b749456]{display:flex;align-items:center;gap:4px}.title.main[data-v-5b749456]{font-weight:500}.title-icon[data-v-5b749456]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-5b749456]{opacity:.5}.result.selected[data-v-5b749456]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-5b749456]{position:relative}.excerpt[data-v-5b749456]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-5b749456]{opacity:1}.excerpt[data-v-5b749456] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-5b749456] mark,.excerpt[data-v-5b749456] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-5b749456] .vp-code-group .tabs{display:none}.excerpt[data-v-5b749456] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-5b749456]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-5b749456]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-5b749456],.result.selected .title-icon[data-v-5b749456]{color:var(--vp-c-brand-1)!important}.no-results[data-v-5b749456]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-5b749456]{flex:none} diff --git a/dev/docker.html b/dev/docker.html index 72d191f..23e7f4d 100644 --- a/dev/docker.html +++ b/dev/docker.html @@ -5,21 +5,21 @@ Docker build and run | ReefGuideAPI.jl - - + + - + - - - + + + -
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
+    
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 1d85c2c..430a2b8 100644 --- a/dev/getting_started.html +++ b/dev/getting_started.html @@ -5,19 +5,19 @@ Getting Started | ReefGuideAPI.jl - - + + - + - - - + + + -
Skip to content

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]
+    
Skip to content

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]
@@ -42,8 +42,8 @@
 $ julia --project=.
 (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).

- +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_edge_aligned_sites() 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_edge_aligned_sites(default =:geometry).

+ \ No newline at end of file diff --git a/dev/hashmap.json b/dev/hashmap.json index 70f68fc..193cf83 100644 --- a/dev/hashmap.json +++ b/dev/hashmap.json @@ -1 +1 @@ -{"api.md":"Dxqu1QHi","docker.md":"CeXB9QeU","getting_started.md":"ArdKq2gR","index.md":"CBMAENFQ"} +{"api.md":"DYWJQ0KO","docker.md":"DslhilOy","getting_started.md":"CWSKhprt","index.md":"BF5iuP_Y"} diff --git a/dev/index.html b/dev/index.html index 652cc7a..47e534a 100644 --- a/dev/index.html +++ b/dev/index.html @@ -5,20 +5,20 @@ ReefGuideAPI.jl - - + + - + - - - + + + -
Skip to content

ReefGuideAPI.jl

An API for supporting reef suitability assessments.

- +
Skip to content

ReefGuideAPI.jl

An API for supporting reef suitability assessments.

+ \ No newline at end of file