R/deckgl-layers.R

Defines functions update_scenegraph_layer add_scenegraph_layer update_simple_mesh_layer add_simple_mesh_layer update_mvt_layer add_mvt_layer update_terrain_layer add_terrain_layer update_tile_3d_layer add_tile_3d_layer update_trips_layer add_trips_layer update_tile_layer add_tile_layer update_h3_hexagon_layer add_h3_hexagon_layer update_h3_cluster_layer add_h3_cluster_layer update_quadkey_layer add_quadkey_layer update_s2_layer add_s2_layer update_great_circle_layer add_great_circle_layer update_heatmap_layer add_heatmap_layer update_gpu_grid_layer add_gpu_grid_layer update_grid_layer add_grid_layer update_contour_layer add_contour_layer update_hexagon_layer add_hexagon_layer update_cpu_grid_layer add_cpu_grid_layer update_screen_grid_layer add_screen_grid_layer update_text_layer add_text_layer update_geojson_layer add_geojson_layer update_solid_polygon_layer add_solid_polygon_layer update_polygon_layer add_polygon_layer update_path_layer add_path_layer update_column_layer add_column_layer update_grid_cell_layer add_grid_cell_layer update_scatterplot_layer add_scatterplot_layer update_point_cloud_layer add_point_cloud_layer update_line_layer add_line_layer update_icon_layer add_icon_layer update_bitmap_layer add_bitmap_layer update_arc_layer add_arc_layer

Documented in add_arc_layer add_bitmap_layer add_column_layer add_contour_layer add_cpu_grid_layer add_geojson_layer add_gpu_grid_layer add_great_circle_layer add_grid_cell_layer add_grid_layer add_h3_cluster_layer add_h3_hexagon_layer add_heatmap_layer add_hexagon_layer add_icon_layer add_line_layer add_mvt_layer add_path_layer add_point_cloud_layer add_polygon_layer add_quadkey_layer add_s2_layer add_scatterplot_layer add_scenegraph_layer add_screen_grid_layer add_simple_mesh_layer add_solid_polygon_layer add_terrain_layer add_text_layer add_tile_3d_layer add_tile_layer add_trips_layer update_arc_layer update_bitmap_layer update_column_layer update_contour_layer update_cpu_grid_layer update_geojson_layer update_gpu_grid_layer update_great_circle_layer update_grid_cell_layer update_grid_layer update_h3_cluster_layer update_h3_hexagon_layer update_heatmap_layer update_hexagon_layer update_icon_layer update_line_layer update_mvt_layer update_path_layer update_point_cloud_layer update_polygon_layer update_quadkey_layer update_s2_layer update_scatterplot_layer update_scenegraph_layer update_screen_grid_layer update_simple_mesh_layer update_solid_polygon_layer update_terrain_layer update_text_layer update_tile_3d_layer update_tile_layer update_trips_layer

# Generated by rdeck: do not edit by hand
# deck.gl version: 8.8.23

#' @name arc_layer
#' @autoglobal
#' @export
add_arc_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "ArcLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    get_source_position = source_position,
    get_target_position = target_position,
    get_source_color = "#000000ff",
    get_target_color = "#000000ff",
    get_width = 1,
    get_height = 1,
    get_tilt = 0,
    great_circle = FALSE,
    width_units = "pixels",
    width_scale = 1,
    width_min_pixels = 0,
    width_max_pixels = 9007199254740991,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_source_position <- rlang::enquo(get_source_position)
  get_target_position <- rlang::enquo(get_target_position)
  get_source_color <- rlang::enquo(get_source_color)
  get_target_color <- rlang::enquo(get_target_color)
  get_width <- rlang::enquo(get_width)
  get_height <- rlang::enquo(get_height)
  get_tilt <- rlang::enquo(get_tilt)
  tooltip <- rlang::enquo(tooltip)

  arc_layer <- with_layer_create_errors(
    new_layer(
      type = "ArcLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_source_position = accessor(get_source_position, data),
      get_target_position = accessor(get_target_position, data),
      get_source_color = accessor(get_source_color, data),
      get_target_color = accessor(get_target_color, data),
      get_width = accessor(get_width, data),
      get_height = accessor(get_height, data),
      get_tilt = accessor(get_tilt, data),
      great_circle = great_circle,
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(arc_layer)
    validate_name(arc_layer)
    validate_group_name(arc_layer)
    validate_data(arc_layer)
    validate_visible(arc_layer)
    validate_pickable(arc_layer)
    validate_opacity(arc_layer)
    validate_wrap_longitude(arc_layer)
    validate_position_format(arc_layer)
    validate_color_format(arc_layer)
    validate_auto_highlight(arc_layer)
    validate_highlight_color(arc_layer)
    validate_get_source_position(arc_layer)
    validate_get_target_position(arc_layer)
    validate_get_source_color(arc_layer)
    validate_get_target_color(arc_layer)
    validate_get_width(arc_layer)
    validate_get_height(arc_layer)
    validate_get_tilt(arc_layer)
    validate_great_circle(arc_layer)
    validate_width_units(arc_layer)
    validate_width_scale(arc_layer)
    validate_width_min_pixels(arc_layer)
    validate_width_max_pixels(arc_layer)
    validate_blending_mode(arc_layer)
    validate_visibility_toggle(arc_layer)
    validate_tooltip(arc_layer)
  })

  add_layer(rdeck, arc_layer)
}
#' @name arc_layer
#' @export
update_arc_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    get_source_position = cur_value(),
    get_target_position = cur_value(),
    get_source_color = cur_value(),
    get_target_color = cur_value(),
    get_width = cur_value(),
    get_height = cur_value(),
    get_tilt = cur_value(),
    great_circle = cur_value(),
    width_units = cur_value(),
    width_scale = cur_value(),
    width_min_pixels = cur_value(),
    width_max_pixels = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_source_position <- rlang::enquo(get_source_position)
  get_target_position <- rlang::enquo(get_target_position)
  get_source_color <- rlang::enquo(get_source_color)
  get_target_color <- rlang::enquo(get_target_color)
  get_width <- rlang::enquo(get_width)
  get_height <- rlang::enquo(get_height)
  get_tilt <- rlang::enquo(get_tilt)
  tooltip <- rlang::enquo(tooltip)
  arc_layer <- with_layer_create_errors(
    new_layer(
      type = "ArcLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_source_position = accessor(get_source_position, data),
      get_target_position = accessor(get_target_position, data),
      get_source_color = accessor(get_source_color, data),
      get_target_color = accessor(get_target_color, data),
      get_width = accessor(get_width, data),
      get_height = accessor(get_height, data),
      get_tilt = accessor(get_tilt, data),
      great_circle = great_circle,
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(arc_layer)
    validate_name(arc_layer)
    validate_group_name(arc_layer)
    validate_data(arc_layer)
    validate_visible(arc_layer)
    validate_pickable(arc_layer)
    validate_opacity(arc_layer)
    validate_wrap_longitude(arc_layer)
    validate_position_format(arc_layer)
    validate_color_format(arc_layer)
    validate_auto_highlight(arc_layer)
    validate_highlight_color(arc_layer)
    validate_get_source_position(arc_layer)
    validate_get_target_position(arc_layer)
    validate_get_source_color(arc_layer)
    validate_get_target_color(arc_layer)
    validate_get_width(arc_layer)
    validate_get_height(arc_layer)
    validate_get_tilt(arc_layer)
    validate_great_circle(arc_layer)
    validate_width_units(arc_layer)
    validate_width_scale(arc_layer)
    validate_width_min_pixels(arc_layer)
    validate_width_max_pixels(arc_layer)
    validate_blending_mode(arc_layer)
    validate_visibility_toggle(arc_layer)
    validate_tooltip(arc_layer)
  })

  update_layer(rdeck, arc_layer)
}

#' @name bitmap_layer
#' @autoglobal
#' @export
add_bitmap_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "BitmapLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    image = NULL,
    bounds = c(1, 0, 0, 1),
    desaturate = 0,
    transparent_color = "#00000000",
    tint_color = "#ffffff",
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  tooltip <- rlang::enquo(tooltip)

  bitmap_layer <- with_layer_create_errors(
    new_layer(
      type = "BitmapLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      image = image,
      bounds = if (!is.null(bounds)) wk::wk_bbox(bounds),
      desaturate = desaturate,
      transparent_color = transparent_color,
      tint_color = tint_color,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(bitmap_layer)
    validate_name(bitmap_layer)
    validate_group_name(bitmap_layer)
    validate_data(bitmap_layer)
    validate_visible(bitmap_layer)
    validate_pickable(bitmap_layer)
    validate_opacity(bitmap_layer)
    validate_wrap_longitude(bitmap_layer)
    validate_position_format(bitmap_layer)
    validate_color_format(bitmap_layer)
    validate_auto_highlight(bitmap_layer)
    validate_highlight_color(bitmap_layer)
    validate_image(bitmap_layer)
    validate_bounds(bitmap_layer)
    validate_desaturate(bitmap_layer)
    validate_transparent_color(bitmap_layer)
    validate_tint_color(bitmap_layer)
    validate_blending_mode(bitmap_layer)
    validate_visibility_toggle(bitmap_layer)
    validate_tooltip(bitmap_layer)
  })

  add_layer(rdeck, bitmap_layer)
}
#' @name bitmap_layer
#' @export
update_bitmap_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    image = cur_value(),
    bounds = cur_value(),
    desaturate = cur_value(),
    transparent_color = cur_value(),
    tint_color = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  tooltip <- rlang::enquo(tooltip)
  bitmap_layer <- with_layer_create_errors(
    new_layer(
      type = "BitmapLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      image = image,
      bounds = if (!is.null(bounds)) wk::wk_bbox(bounds),
      desaturate = desaturate,
      transparent_color = transparent_color,
      tint_color = tint_color,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(bitmap_layer)
    validate_name(bitmap_layer)
    validate_group_name(bitmap_layer)
    validate_data(bitmap_layer)
    validate_visible(bitmap_layer)
    validate_pickable(bitmap_layer)
    validate_opacity(bitmap_layer)
    validate_wrap_longitude(bitmap_layer)
    validate_position_format(bitmap_layer)
    validate_color_format(bitmap_layer)
    validate_auto_highlight(bitmap_layer)
    validate_highlight_color(bitmap_layer)
    validate_image(bitmap_layer)
    validate_bounds(bitmap_layer)
    validate_desaturate(bitmap_layer)
    validate_transparent_color(bitmap_layer)
    validate_tint_color(bitmap_layer)
    validate_blending_mode(bitmap_layer)
    validate_visibility_toggle(bitmap_layer)
    validate_tooltip(bitmap_layer)
  })

  update_layer(rdeck, bitmap_layer)
}

#' @name icon_layer
#' @autoglobal
#' @export
add_icon_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "IconLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    icon_atlas = NULL,
    icon_mapping = list(),
    size_scale = 1,
    billboard = TRUE,
    size_units = "pixels",
    size_min_pixels = 0,
    size_max_pixels = 9007199254740991,
    alpha_cutoff = 0.05,
    get_position = position,
    get_icon = icon,
    get_color = "#000000ff",
    get_size = 1,
    get_angle = 0,
    get_pixel_offset = c(0, 0),
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_icon <- rlang::enquo(get_icon)
  get_color <- rlang::enquo(get_color)
  get_size <- rlang::enquo(get_size)
  get_angle <- rlang::enquo(get_angle)
  get_pixel_offset <- rlang::enquo(get_pixel_offset)
  tooltip <- rlang::enquo(tooltip)

  icon_layer <- with_layer_create_errors(
    new_layer(
      type = "IconLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      icon_atlas = icon_atlas,
      icon_mapping = icon_mapping,
      size_scale = size_scale,
      billboard = billboard,
      size_units = size_units,
      size_min_pixels = size_min_pixels,
      size_max_pixels = size_max_pixels,
      alpha_cutoff = alpha_cutoff,
      get_position = accessor(get_position, data),
      get_icon = accessor(get_icon, data),
      get_color = accessor(get_color, data),
      get_size = accessor(get_size, data),
      get_angle = accessor(get_angle, data),
      get_pixel_offset = accessor(get_pixel_offset, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(icon_layer)
    validate_name(icon_layer)
    validate_group_name(icon_layer)
    validate_data(icon_layer)
    validate_visible(icon_layer)
    validate_pickable(icon_layer)
    validate_opacity(icon_layer)
    validate_wrap_longitude(icon_layer)
    validate_position_format(icon_layer)
    validate_color_format(icon_layer)
    validate_auto_highlight(icon_layer)
    validate_highlight_color(icon_layer)
    validate_icon_atlas(icon_layer)
    validate_icon_mapping(icon_layer)
    validate_size_scale(icon_layer)
    validate_billboard(icon_layer)
    validate_size_units(icon_layer)
    validate_size_min_pixels(icon_layer)
    validate_size_max_pixels(icon_layer)
    validate_alpha_cutoff(icon_layer)
    validate_get_position(icon_layer)
    validate_get_icon(icon_layer)
    validate_get_color(icon_layer)
    validate_get_size(icon_layer)
    validate_get_angle(icon_layer)
    validate_get_pixel_offset(icon_layer)
    validate_blending_mode(icon_layer)
    validate_visibility_toggle(icon_layer)
    validate_tooltip(icon_layer)
  })

  add_layer(rdeck, icon_layer)
}
#' @name icon_layer
#' @export
update_icon_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    icon_atlas = cur_value(),
    icon_mapping = cur_value(),
    size_scale = cur_value(),
    billboard = cur_value(),
    size_units = cur_value(),
    size_min_pixels = cur_value(),
    size_max_pixels = cur_value(),
    alpha_cutoff = cur_value(),
    get_position = cur_value(),
    get_icon = cur_value(),
    get_color = cur_value(),
    get_size = cur_value(),
    get_angle = cur_value(),
    get_pixel_offset = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_icon <- rlang::enquo(get_icon)
  get_color <- rlang::enquo(get_color)
  get_size <- rlang::enquo(get_size)
  get_angle <- rlang::enquo(get_angle)
  get_pixel_offset <- rlang::enquo(get_pixel_offset)
  tooltip <- rlang::enquo(tooltip)
  icon_layer <- with_layer_create_errors(
    new_layer(
      type = "IconLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      icon_atlas = icon_atlas,
      icon_mapping = icon_mapping,
      size_scale = size_scale,
      billboard = billboard,
      size_units = size_units,
      size_min_pixels = size_min_pixels,
      size_max_pixels = size_max_pixels,
      alpha_cutoff = alpha_cutoff,
      get_position = accessor(get_position, data),
      get_icon = accessor(get_icon, data),
      get_color = accessor(get_color, data),
      get_size = accessor(get_size, data),
      get_angle = accessor(get_angle, data),
      get_pixel_offset = accessor(get_pixel_offset, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(icon_layer)
    validate_name(icon_layer)
    validate_group_name(icon_layer)
    validate_data(icon_layer)
    validate_visible(icon_layer)
    validate_pickable(icon_layer)
    validate_opacity(icon_layer)
    validate_wrap_longitude(icon_layer)
    validate_position_format(icon_layer)
    validate_color_format(icon_layer)
    validate_auto_highlight(icon_layer)
    validate_highlight_color(icon_layer)
    validate_icon_atlas(icon_layer)
    validate_icon_mapping(icon_layer)
    validate_size_scale(icon_layer)
    validate_billboard(icon_layer)
    validate_size_units(icon_layer)
    validate_size_min_pixels(icon_layer)
    validate_size_max_pixels(icon_layer)
    validate_alpha_cutoff(icon_layer)
    validate_get_position(icon_layer)
    validate_get_icon(icon_layer)
    validate_get_color(icon_layer)
    validate_get_size(icon_layer)
    validate_get_angle(icon_layer)
    validate_get_pixel_offset(icon_layer)
    validate_blending_mode(icon_layer)
    validate_visibility_toggle(icon_layer)
    validate_tooltip(icon_layer)
  })

  update_layer(rdeck, icon_layer)
}

#' @name line_layer
#' @autoglobal
#' @export
add_line_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "LineLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    get_source_position = source_position,
    get_target_position = target_position,
    get_color = "#000000ff",
    get_width = 1,
    width_units = "pixels",
    width_scale = 1,
    width_min_pixels = 0,
    width_max_pixels = 9007199254740991,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_source_position <- rlang::enquo(get_source_position)
  get_target_position <- rlang::enquo(get_target_position)
  get_color <- rlang::enquo(get_color)
  get_width <- rlang::enquo(get_width)
  tooltip <- rlang::enquo(tooltip)

  line_layer <- with_layer_create_errors(
    new_layer(
      type = "LineLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_source_position = accessor(get_source_position, data),
      get_target_position = accessor(get_target_position, data),
      get_color = accessor(get_color, data),
      get_width = accessor(get_width, data),
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(line_layer)
    validate_name(line_layer)
    validate_group_name(line_layer)
    validate_data(line_layer)
    validate_visible(line_layer)
    validate_pickable(line_layer)
    validate_opacity(line_layer)
    validate_wrap_longitude(line_layer)
    validate_position_format(line_layer)
    validate_color_format(line_layer)
    validate_auto_highlight(line_layer)
    validate_highlight_color(line_layer)
    validate_get_source_position(line_layer)
    validate_get_target_position(line_layer)
    validate_get_color(line_layer)
    validate_get_width(line_layer)
    validate_width_units(line_layer)
    validate_width_scale(line_layer)
    validate_width_min_pixels(line_layer)
    validate_width_max_pixels(line_layer)
    validate_blending_mode(line_layer)
    validate_visibility_toggle(line_layer)
    validate_tooltip(line_layer)
  })

  add_layer(rdeck, line_layer)
}
#' @name line_layer
#' @export
update_line_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    get_source_position = cur_value(),
    get_target_position = cur_value(),
    get_color = cur_value(),
    get_width = cur_value(),
    width_units = cur_value(),
    width_scale = cur_value(),
    width_min_pixels = cur_value(),
    width_max_pixels = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_source_position <- rlang::enquo(get_source_position)
  get_target_position <- rlang::enquo(get_target_position)
  get_color <- rlang::enquo(get_color)
  get_width <- rlang::enquo(get_width)
  tooltip <- rlang::enquo(tooltip)
  line_layer <- with_layer_create_errors(
    new_layer(
      type = "LineLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_source_position = accessor(get_source_position, data),
      get_target_position = accessor(get_target_position, data),
      get_color = accessor(get_color, data),
      get_width = accessor(get_width, data),
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(line_layer)
    validate_name(line_layer)
    validate_group_name(line_layer)
    validate_data(line_layer)
    validate_visible(line_layer)
    validate_pickable(line_layer)
    validate_opacity(line_layer)
    validate_wrap_longitude(line_layer)
    validate_position_format(line_layer)
    validate_color_format(line_layer)
    validate_auto_highlight(line_layer)
    validate_highlight_color(line_layer)
    validate_get_source_position(line_layer)
    validate_get_target_position(line_layer)
    validate_get_color(line_layer)
    validate_get_width(line_layer)
    validate_width_units(line_layer)
    validate_width_scale(line_layer)
    validate_width_min_pixels(line_layer)
    validate_width_max_pixels(line_layer)
    validate_blending_mode(line_layer)
    validate_visibility_toggle(line_layer)
    validate_tooltip(line_layer)
  })

  update_layer(rdeck, line_layer)
}

#' @name point_cloud_layer
#' @autoglobal
#' @export
add_point_cloud_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "PointCloudLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    size_units = "pixels",
    point_size = 10,
    get_position = position,
    get_normal = c(0, 0, 1),
    get_color = "#000000ff",
    material = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_normal <- rlang::enquo(get_normal)
  get_color <- rlang::enquo(get_color)
  tooltip <- rlang::enquo(tooltip)

  point_cloud_layer <- with_layer_create_errors(
    new_layer(
      type = "PointCloudLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      size_units = size_units,
      point_size = point_size,
      get_position = accessor(get_position, data),
      get_normal = accessor(get_normal, data),
      get_color = accessor(get_color, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(point_cloud_layer)
    validate_name(point_cloud_layer)
    validate_group_name(point_cloud_layer)
    validate_data(point_cloud_layer)
    validate_visible(point_cloud_layer)
    validate_pickable(point_cloud_layer)
    validate_opacity(point_cloud_layer)
    validate_wrap_longitude(point_cloud_layer)
    validate_position_format(point_cloud_layer)
    validate_color_format(point_cloud_layer)
    validate_auto_highlight(point_cloud_layer)
    validate_highlight_color(point_cloud_layer)
    validate_size_units(point_cloud_layer)
    validate_point_size(point_cloud_layer)
    validate_get_position(point_cloud_layer)
    validate_get_normal(point_cloud_layer)
    validate_get_color(point_cloud_layer)
    validate_material(point_cloud_layer)
    validate_blending_mode(point_cloud_layer)
    validate_visibility_toggle(point_cloud_layer)
    validate_tooltip(point_cloud_layer)
  })

  add_layer(rdeck, point_cloud_layer)
}
#' @name point_cloud_layer
#' @export
update_point_cloud_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    size_units = cur_value(),
    point_size = cur_value(),
    get_position = cur_value(),
    get_normal = cur_value(),
    get_color = cur_value(),
    material = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_normal <- rlang::enquo(get_normal)
  get_color <- rlang::enquo(get_color)
  tooltip <- rlang::enquo(tooltip)
  point_cloud_layer <- with_layer_create_errors(
    new_layer(
      type = "PointCloudLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      size_units = size_units,
      point_size = point_size,
      get_position = accessor(get_position, data),
      get_normal = accessor(get_normal, data),
      get_color = accessor(get_color, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(point_cloud_layer)
    validate_name(point_cloud_layer)
    validate_group_name(point_cloud_layer)
    validate_data(point_cloud_layer)
    validate_visible(point_cloud_layer)
    validate_pickable(point_cloud_layer)
    validate_opacity(point_cloud_layer)
    validate_wrap_longitude(point_cloud_layer)
    validate_position_format(point_cloud_layer)
    validate_color_format(point_cloud_layer)
    validate_auto_highlight(point_cloud_layer)
    validate_highlight_color(point_cloud_layer)
    validate_size_units(point_cloud_layer)
    validate_point_size(point_cloud_layer)
    validate_get_position(point_cloud_layer)
    validate_get_normal(point_cloud_layer)
    validate_get_color(point_cloud_layer)
    validate_material(point_cloud_layer)
    validate_blending_mode(point_cloud_layer)
    validate_visibility_toggle(point_cloud_layer)
    validate_tooltip(point_cloud_layer)
  })

  update_layer(rdeck, point_cloud_layer)
}

#' @name scatterplot_layer
#' @autoglobal
#' @export
add_scatterplot_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "ScatterplotLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    radius_units = "meters",
    radius_scale = 1,
    radius_min_pixels = 0,
    radius_max_pixels = 9007199254740991,
    line_width_units = "meters",
    line_width_scale = 1,
    line_width_min_pixels = 0,
    line_width_max_pixels = 9007199254740991,
    stroked = FALSE,
    filled = TRUE,
    billboard = FALSE,
    antialiasing = TRUE,
    get_position = position,
    get_radius = 1,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_radius <- rlang::enquo(get_radius)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  tooltip <- rlang::enquo(tooltip)

  scatterplot_layer <- with_layer_create_errors(
    new_layer(
      type = "ScatterplotLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      radius_units = radius_units,
      radius_scale = radius_scale,
      radius_min_pixels = radius_min_pixels,
      radius_max_pixels = radius_max_pixels,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      stroked = stroked,
      filled = filled,
      billboard = billboard,
      antialiasing = antialiasing,
      get_position = accessor(get_position, data),
      get_radius = accessor(get_radius, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(scatterplot_layer)
    validate_name(scatterplot_layer)
    validate_group_name(scatterplot_layer)
    validate_data(scatterplot_layer)
    validate_visible(scatterplot_layer)
    validate_pickable(scatterplot_layer)
    validate_opacity(scatterplot_layer)
    validate_wrap_longitude(scatterplot_layer)
    validate_position_format(scatterplot_layer)
    validate_color_format(scatterplot_layer)
    validate_auto_highlight(scatterplot_layer)
    validate_highlight_color(scatterplot_layer)
    validate_radius_units(scatterplot_layer)
    validate_radius_scale(scatterplot_layer)
    validate_radius_min_pixels(scatterplot_layer)
    validate_radius_max_pixels(scatterplot_layer)
    validate_line_width_units(scatterplot_layer)
    validate_line_width_scale(scatterplot_layer)
    validate_line_width_min_pixels(scatterplot_layer)
    validate_line_width_max_pixels(scatterplot_layer)
    validate_stroked(scatterplot_layer)
    validate_filled(scatterplot_layer)
    validate_billboard(scatterplot_layer)
    validate_antialiasing(scatterplot_layer)
    validate_get_position(scatterplot_layer)
    validate_get_radius(scatterplot_layer)
    validate_get_fill_color(scatterplot_layer)
    validate_get_line_color(scatterplot_layer)
    validate_get_line_width(scatterplot_layer)
    validate_blending_mode(scatterplot_layer)
    validate_visibility_toggle(scatterplot_layer)
    validate_tooltip(scatterplot_layer)
  })

  add_layer(rdeck, scatterplot_layer)
}
#' @name scatterplot_layer
#' @export
update_scatterplot_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    radius_units = cur_value(),
    radius_scale = cur_value(),
    radius_min_pixels = cur_value(),
    radius_max_pixels = cur_value(),
    line_width_units = cur_value(),
    line_width_scale = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_max_pixels = cur_value(),
    stroked = cur_value(),
    filled = cur_value(),
    billboard = cur_value(),
    antialiasing = cur_value(),
    get_position = cur_value(),
    get_radius = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_radius <- rlang::enquo(get_radius)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  tooltip <- rlang::enquo(tooltip)
  scatterplot_layer <- with_layer_create_errors(
    new_layer(
      type = "ScatterplotLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      radius_units = radius_units,
      radius_scale = radius_scale,
      radius_min_pixels = radius_min_pixels,
      radius_max_pixels = radius_max_pixels,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      stroked = stroked,
      filled = filled,
      billboard = billboard,
      antialiasing = antialiasing,
      get_position = accessor(get_position, data),
      get_radius = accessor(get_radius, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(scatterplot_layer)
    validate_name(scatterplot_layer)
    validate_group_name(scatterplot_layer)
    validate_data(scatterplot_layer)
    validate_visible(scatterplot_layer)
    validate_pickable(scatterplot_layer)
    validate_opacity(scatterplot_layer)
    validate_wrap_longitude(scatterplot_layer)
    validate_position_format(scatterplot_layer)
    validate_color_format(scatterplot_layer)
    validate_auto_highlight(scatterplot_layer)
    validate_highlight_color(scatterplot_layer)
    validate_radius_units(scatterplot_layer)
    validate_radius_scale(scatterplot_layer)
    validate_radius_min_pixels(scatterplot_layer)
    validate_radius_max_pixels(scatterplot_layer)
    validate_line_width_units(scatterplot_layer)
    validate_line_width_scale(scatterplot_layer)
    validate_line_width_min_pixels(scatterplot_layer)
    validate_line_width_max_pixels(scatterplot_layer)
    validate_stroked(scatterplot_layer)
    validate_filled(scatterplot_layer)
    validate_billboard(scatterplot_layer)
    validate_antialiasing(scatterplot_layer)
    validate_get_position(scatterplot_layer)
    validate_get_radius(scatterplot_layer)
    validate_get_fill_color(scatterplot_layer)
    validate_get_line_color(scatterplot_layer)
    validate_get_line_width(scatterplot_layer)
    validate_blending_mode(scatterplot_layer)
    validate_visibility_toggle(scatterplot_layer)
    validate_tooltip(scatterplot_layer)
  })

  update_layer(rdeck, scatterplot_layer)
}

#' @name grid_cell_layer
#' @autoglobal
#' @export
add_grid_cell_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "GridCellLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    disk_resolution = 20,
    vertices = NULL,
    radius = 1000,
    angle = 0,
    offset = c(1, 1),
    coverage = 1,
    elevation_scale = 1,
    radius_units = "meters",
    line_width_units = "meters",
    line_width_scale = 1,
    line_width_min_pixels = 0,
    line_width_max_pixels = 9007199254740991,
    extruded = FALSE,
    wireframe = FALSE,
    filled = TRUE,
    stroked = FALSE,
    get_position = position,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_elevation = 1000,
    material = TRUE,
    cell_size = 1000,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)

  grid_cell_layer <- with_layer_create_errors(
    new_layer(
      type = "GridCellLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      disk_resolution = disk_resolution,
      vertices = vertices,
      radius = radius,
      angle = angle,
      offset = offset,
      coverage = coverage,
      elevation_scale = elevation_scale,
      radius_units = radius_units,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      extruded = extruded,
      wireframe = wireframe,
      filled = filled,
      stroked = stroked,
      get_position = accessor(get_position, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      cell_size = cell_size,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(grid_cell_layer)
    validate_name(grid_cell_layer)
    validate_group_name(grid_cell_layer)
    validate_data(grid_cell_layer)
    validate_visible(grid_cell_layer)
    validate_pickable(grid_cell_layer)
    validate_opacity(grid_cell_layer)
    validate_wrap_longitude(grid_cell_layer)
    validate_position_format(grid_cell_layer)
    validate_color_format(grid_cell_layer)
    validate_auto_highlight(grid_cell_layer)
    validate_highlight_color(grid_cell_layer)
    validate_disk_resolution(grid_cell_layer)
    validate_vertices(grid_cell_layer)
    validate_radius(grid_cell_layer)
    validate_angle(grid_cell_layer)
    validate_offset(grid_cell_layer)
    validate_coverage(grid_cell_layer)
    validate_elevation_scale(grid_cell_layer)
    validate_radius_units(grid_cell_layer)
    validate_line_width_units(grid_cell_layer)
    validate_line_width_scale(grid_cell_layer)
    validate_line_width_min_pixels(grid_cell_layer)
    validate_line_width_max_pixels(grid_cell_layer)
    validate_extruded(grid_cell_layer)
    validate_wireframe(grid_cell_layer)
    validate_filled(grid_cell_layer)
    validate_stroked(grid_cell_layer)
    validate_get_position(grid_cell_layer)
    validate_get_fill_color(grid_cell_layer)
    validate_get_line_color(grid_cell_layer)
    validate_get_line_width(grid_cell_layer)
    validate_get_elevation(grid_cell_layer)
    validate_material(grid_cell_layer)
    validate_cell_size(grid_cell_layer)
    validate_blending_mode(grid_cell_layer)
    validate_visibility_toggle(grid_cell_layer)
    validate_tooltip(grid_cell_layer)
  })

  add_layer(rdeck, grid_cell_layer)
}
#' @name grid_cell_layer
#' @export
update_grid_cell_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    disk_resolution = cur_value(),
    vertices = cur_value(),
    radius = cur_value(),
    angle = cur_value(),
    offset = cur_value(),
    coverage = cur_value(),
    elevation_scale = cur_value(),
    radius_units = cur_value(),
    line_width_units = cur_value(),
    line_width_scale = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_max_pixels = cur_value(),
    extruded = cur_value(),
    wireframe = cur_value(),
    filled = cur_value(),
    stroked = cur_value(),
    get_position = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_elevation = cur_value(),
    material = cur_value(),
    cell_size = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)
  grid_cell_layer <- with_layer_create_errors(
    new_layer(
      type = "GridCellLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      disk_resolution = disk_resolution,
      vertices = vertices,
      radius = radius,
      angle = angle,
      offset = offset,
      coverage = coverage,
      elevation_scale = elevation_scale,
      radius_units = radius_units,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      extruded = extruded,
      wireframe = wireframe,
      filled = filled,
      stroked = stroked,
      get_position = accessor(get_position, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      cell_size = cell_size,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(grid_cell_layer)
    validate_name(grid_cell_layer)
    validate_group_name(grid_cell_layer)
    validate_data(grid_cell_layer)
    validate_visible(grid_cell_layer)
    validate_pickable(grid_cell_layer)
    validate_opacity(grid_cell_layer)
    validate_wrap_longitude(grid_cell_layer)
    validate_position_format(grid_cell_layer)
    validate_color_format(grid_cell_layer)
    validate_auto_highlight(grid_cell_layer)
    validate_highlight_color(grid_cell_layer)
    validate_disk_resolution(grid_cell_layer)
    validate_vertices(grid_cell_layer)
    validate_radius(grid_cell_layer)
    validate_angle(grid_cell_layer)
    validate_offset(grid_cell_layer)
    validate_coverage(grid_cell_layer)
    validate_elevation_scale(grid_cell_layer)
    validate_radius_units(grid_cell_layer)
    validate_line_width_units(grid_cell_layer)
    validate_line_width_scale(grid_cell_layer)
    validate_line_width_min_pixels(grid_cell_layer)
    validate_line_width_max_pixels(grid_cell_layer)
    validate_extruded(grid_cell_layer)
    validate_wireframe(grid_cell_layer)
    validate_filled(grid_cell_layer)
    validate_stroked(grid_cell_layer)
    validate_get_position(grid_cell_layer)
    validate_get_fill_color(grid_cell_layer)
    validate_get_line_color(grid_cell_layer)
    validate_get_line_width(grid_cell_layer)
    validate_get_elevation(grid_cell_layer)
    validate_material(grid_cell_layer)
    validate_cell_size(grid_cell_layer)
    validate_blending_mode(grid_cell_layer)
    validate_visibility_toggle(grid_cell_layer)
    validate_tooltip(grid_cell_layer)
  })

  update_layer(rdeck, grid_cell_layer)
}

#' @name column_layer
#' @autoglobal
#' @export
add_column_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "ColumnLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    disk_resolution = 20,
    vertices = NULL,
    radius = 1000,
    angle = 0,
    offset = c(0, 0),
    coverage = 1,
    elevation_scale = 1,
    radius_units = "meters",
    line_width_units = "meters",
    line_width_scale = 1,
    line_width_min_pixels = 0,
    line_width_max_pixels = 9007199254740991,
    extruded = FALSE,
    wireframe = FALSE,
    filled = TRUE,
    stroked = FALSE,
    get_position = position,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_elevation = 1000,
    material = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)

  column_layer <- with_layer_create_errors(
    new_layer(
      type = "ColumnLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      disk_resolution = disk_resolution,
      vertices = vertices,
      radius = radius,
      angle = angle,
      offset = offset,
      coverage = coverage,
      elevation_scale = elevation_scale,
      radius_units = radius_units,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      extruded = extruded,
      wireframe = wireframe,
      filled = filled,
      stroked = stroked,
      get_position = accessor(get_position, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(column_layer)
    validate_name(column_layer)
    validate_group_name(column_layer)
    validate_data(column_layer)
    validate_visible(column_layer)
    validate_pickable(column_layer)
    validate_opacity(column_layer)
    validate_wrap_longitude(column_layer)
    validate_position_format(column_layer)
    validate_color_format(column_layer)
    validate_auto_highlight(column_layer)
    validate_highlight_color(column_layer)
    validate_disk_resolution(column_layer)
    validate_vertices(column_layer)
    validate_radius(column_layer)
    validate_angle(column_layer)
    validate_offset(column_layer)
    validate_coverage(column_layer)
    validate_elevation_scale(column_layer)
    validate_radius_units(column_layer)
    validate_line_width_units(column_layer)
    validate_line_width_scale(column_layer)
    validate_line_width_min_pixels(column_layer)
    validate_line_width_max_pixels(column_layer)
    validate_extruded(column_layer)
    validate_wireframe(column_layer)
    validate_filled(column_layer)
    validate_stroked(column_layer)
    validate_get_position(column_layer)
    validate_get_fill_color(column_layer)
    validate_get_line_color(column_layer)
    validate_get_line_width(column_layer)
    validate_get_elevation(column_layer)
    validate_material(column_layer)
    validate_blending_mode(column_layer)
    validate_visibility_toggle(column_layer)
    validate_tooltip(column_layer)
  })

  add_layer(rdeck, column_layer)
}
#' @name column_layer
#' @export
update_column_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    disk_resolution = cur_value(),
    vertices = cur_value(),
    radius = cur_value(),
    angle = cur_value(),
    offset = cur_value(),
    coverage = cur_value(),
    elevation_scale = cur_value(),
    radius_units = cur_value(),
    line_width_units = cur_value(),
    line_width_scale = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_max_pixels = cur_value(),
    extruded = cur_value(),
    wireframe = cur_value(),
    filled = cur_value(),
    stroked = cur_value(),
    get_position = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_elevation = cur_value(),
    material = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)
  column_layer <- with_layer_create_errors(
    new_layer(
      type = "ColumnLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      disk_resolution = disk_resolution,
      vertices = vertices,
      radius = radius,
      angle = angle,
      offset = offset,
      coverage = coverage,
      elevation_scale = elevation_scale,
      radius_units = radius_units,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      extruded = extruded,
      wireframe = wireframe,
      filled = filled,
      stroked = stroked,
      get_position = accessor(get_position, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(column_layer)
    validate_name(column_layer)
    validate_group_name(column_layer)
    validate_data(column_layer)
    validate_visible(column_layer)
    validate_pickable(column_layer)
    validate_opacity(column_layer)
    validate_wrap_longitude(column_layer)
    validate_position_format(column_layer)
    validate_color_format(column_layer)
    validate_auto_highlight(column_layer)
    validate_highlight_color(column_layer)
    validate_disk_resolution(column_layer)
    validate_vertices(column_layer)
    validate_radius(column_layer)
    validate_angle(column_layer)
    validate_offset(column_layer)
    validate_coverage(column_layer)
    validate_elevation_scale(column_layer)
    validate_radius_units(column_layer)
    validate_line_width_units(column_layer)
    validate_line_width_scale(column_layer)
    validate_line_width_min_pixels(column_layer)
    validate_line_width_max_pixels(column_layer)
    validate_extruded(column_layer)
    validate_wireframe(column_layer)
    validate_filled(column_layer)
    validate_stroked(column_layer)
    validate_get_position(column_layer)
    validate_get_fill_color(column_layer)
    validate_get_line_color(column_layer)
    validate_get_line_width(column_layer)
    validate_get_elevation(column_layer)
    validate_material(column_layer)
    validate_blending_mode(column_layer)
    validate_visibility_toggle(column_layer)
    validate_tooltip(column_layer)
  })

  update_layer(rdeck, column_layer)
}

#' @name path_layer
#' @autoglobal
#' @export
add_path_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "PathLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    width_units = "meters",
    width_scale = 1,
    width_min_pixels = 0,
    width_max_pixels = 9007199254740991,
    joint_rounded = FALSE,
    cap_rounded = FALSE,
    miter_limit = 4,
    billboard = FALSE,
    get_path = path,
    get_color = "#000000ff",
    get_width = 1,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_path <- rlang::enquo(get_path)
  get_color <- rlang::enquo(get_color)
  get_width <- rlang::enquo(get_width)
  tooltip <- rlang::enquo(tooltip)

  path_layer <- with_layer_create_errors(
    new_layer(
      type = "PathLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      joint_rounded = joint_rounded,
      cap_rounded = cap_rounded,
      miter_limit = miter_limit,
      billboard = billboard,
      get_path = accessor(get_path, data),
      get_color = accessor(get_color, data),
      get_width = accessor(get_width, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(path_layer)
    validate_name(path_layer)
    validate_group_name(path_layer)
    validate_data(path_layer)
    validate_visible(path_layer)
    validate_pickable(path_layer)
    validate_opacity(path_layer)
    validate_wrap_longitude(path_layer)
    validate_position_format(path_layer)
    validate_color_format(path_layer)
    validate_auto_highlight(path_layer)
    validate_highlight_color(path_layer)
    validate_width_units(path_layer)
    validate_width_scale(path_layer)
    validate_width_min_pixels(path_layer)
    validate_width_max_pixels(path_layer)
    validate_joint_rounded(path_layer)
    validate_cap_rounded(path_layer)
    validate_miter_limit(path_layer)
    validate_billboard(path_layer)
    validate_get_path(path_layer)
    validate_get_color(path_layer)
    validate_get_width(path_layer)
    validate_blending_mode(path_layer)
    validate_visibility_toggle(path_layer)
    validate_tooltip(path_layer)
  })

  add_layer(rdeck, path_layer)
}
#' @name path_layer
#' @export
update_path_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    width_units = cur_value(),
    width_scale = cur_value(),
    width_min_pixels = cur_value(),
    width_max_pixels = cur_value(),
    joint_rounded = cur_value(),
    cap_rounded = cur_value(),
    miter_limit = cur_value(),
    billboard = cur_value(),
    get_path = cur_value(),
    get_color = cur_value(),
    get_width = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_path <- rlang::enquo(get_path)
  get_color <- rlang::enquo(get_color)
  get_width <- rlang::enquo(get_width)
  tooltip <- rlang::enquo(tooltip)
  path_layer <- with_layer_create_errors(
    new_layer(
      type = "PathLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      joint_rounded = joint_rounded,
      cap_rounded = cap_rounded,
      miter_limit = miter_limit,
      billboard = billboard,
      get_path = accessor(get_path, data),
      get_color = accessor(get_color, data),
      get_width = accessor(get_width, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(path_layer)
    validate_name(path_layer)
    validate_group_name(path_layer)
    validate_data(path_layer)
    validate_visible(path_layer)
    validate_pickable(path_layer)
    validate_opacity(path_layer)
    validate_wrap_longitude(path_layer)
    validate_position_format(path_layer)
    validate_color_format(path_layer)
    validate_auto_highlight(path_layer)
    validate_highlight_color(path_layer)
    validate_width_units(path_layer)
    validate_width_scale(path_layer)
    validate_width_min_pixels(path_layer)
    validate_width_max_pixels(path_layer)
    validate_joint_rounded(path_layer)
    validate_cap_rounded(path_layer)
    validate_miter_limit(path_layer)
    validate_billboard(path_layer)
    validate_get_path(path_layer)
    validate_get_color(path_layer)
    validate_get_width(path_layer)
    validate_blending_mode(path_layer)
    validate_visibility_toggle(path_layer)
    validate_tooltip(path_layer)
  })

  update_layer(rdeck, path_layer)
}

#' @name polygon_layer
#' @autoglobal
#' @export
add_polygon_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "PolygonLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    stroked = TRUE,
    filled = TRUE,
    extruded = FALSE,
    elevation_scale = 1,
    wireframe = FALSE,
    line_width_units = "meters",
    line_width_scale = 1,
    line_width_min_pixels = 0,
    line_width_max_pixels = 9007199254740991,
    line_joint_rounded = FALSE,
    line_miter_limit = 4,
    get_polygon = polygon,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_elevation = 1000,
    material = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_polygon <- rlang::enquo(get_polygon)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)

  polygon_layer <- with_layer_create_errors(
    new_layer(
      type = "PolygonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_polygon = accessor(get_polygon, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(polygon_layer)
    validate_name(polygon_layer)
    validate_group_name(polygon_layer)
    validate_data(polygon_layer)
    validate_visible(polygon_layer)
    validate_pickable(polygon_layer)
    validate_opacity(polygon_layer)
    validate_wrap_longitude(polygon_layer)
    validate_position_format(polygon_layer)
    validate_color_format(polygon_layer)
    validate_auto_highlight(polygon_layer)
    validate_highlight_color(polygon_layer)
    validate_stroked(polygon_layer)
    validate_filled(polygon_layer)
    validate_extruded(polygon_layer)
    validate_elevation_scale(polygon_layer)
    validate_wireframe(polygon_layer)
    validate_line_width_units(polygon_layer)
    validate_line_width_scale(polygon_layer)
    validate_line_width_min_pixels(polygon_layer)
    validate_line_width_max_pixels(polygon_layer)
    validate_line_joint_rounded(polygon_layer)
    validate_line_miter_limit(polygon_layer)
    validate_get_polygon(polygon_layer)
    validate_get_fill_color(polygon_layer)
    validate_get_line_color(polygon_layer)
    validate_get_line_width(polygon_layer)
    validate_get_elevation(polygon_layer)
    validate_material(polygon_layer)
    validate_blending_mode(polygon_layer)
    validate_visibility_toggle(polygon_layer)
    validate_tooltip(polygon_layer)
  })

  add_layer(rdeck, polygon_layer)
}
#' @name polygon_layer
#' @export
update_polygon_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    stroked = cur_value(),
    filled = cur_value(),
    extruded = cur_value(),
    elevation_scale = cur_value(),
    wireframe = cur_value(),
    line_width_units = cur_value(),
    line_width_scale = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_max_pixels = cur_value(),
    line_joint_rounded = cur_value(),
    line_miter_limit = cur_value(),
    get_polygon = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_elevation = cur_value(),
    material = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_polygon <- rlang::enquo(get_polygon)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)
  polygon_layer <- with_layer_create_errors(
    new_layer(
      type = "PolygonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_polygon = accessor(get_polygon, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(polygon_layer)
    validate_name(polygon_layer)
    validate_group_name(polygon_layer)
    validate_data(polygon_layer)
    validate_visible(polygon_layer)
    validate_pickable(polygon_layer)
    validate_opacity(polygon_layer)
    validate_wrap_longitude(polygon_layer)
    validate_position_format(polygon_layer)
    validate_color_format(polygon_layer)
    validate_auto_highlight(polygon_layer)
    validate_highlight_color(polygon_layer)
    validate_stroked(polygon_layer)
    validate_filled(polygon_layer)
    validate_extruded(polygon_layer)
    validate_elevation_scale(polygon_layer)
    validate_wireframe(polygon_layer)
    validate_line_width_units(polygon_layer)
    validate_line_width_scale(polygon_layer)
    validate_line_width_min_pixels(polygon_layer)
    validate_line_width_max_pixels(polygon_layer)
    validate_line_joint_rounded(polygon_layer)
    validate_line_miter_limit(polygon_layer)
    validate_get_polygon(polygon_layer)
    validate_get_fill_color(polygon_layer)
    validate_get_line_color(polygon_layer)
    validate_get_line_width(polygon_layer)
    validate_get_elevation(polygon_layer)
    validate_material(polygon_layer)
    validate_blending_mode(polygon_layer)
    validate_visibility_toggle(polygon_layer)
    validate_tooltip(polygon_layer)
  })

  update_layer(rdeck, polygon_layer)
}

#' @name solid_polygon_layer
#' @autoglobal
#' @export
add_solid_polygon_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "SolidPolygonLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    filled = TRUE,
    extruded = FALSE,
    wireframe = FALSE,
    elevation_scale = 1,
    get_polygon = polygon,
    get_elevation = 1000,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    material = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_polygon <- rlang::enquo(get_polygon)
  get_elevation <- rlang::enquo(get_elevation)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  tooltip <- rlang::enquo(tooltip)

  solid_polygon_layer <- with_layer_create_errors(
    new_layer(
      type = "SolidPolygonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      filled = filled,
      extruded = extruded,
      wireframe = wireframe,
      elevation_scale = elevation_scale,
      get_polygon = accessor(get_polygon, data),
      get_elevation = accessor(get_elevation, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(solid_polygon_layer)
    validate_name(solid_polygon_layer)
    validate_group_name(solid_polygon_layer)
    validate_data(solid_polygon_layer)
    validate_visible(solid_polygon_layer)
    validate_pickable(solid_polygon_layer)
    validate_opacity(solid_polygon_layer)
    validate_wrap_longitude(solid_polygon_layer)
    validate_position_format(solid_polygon_layer)
    validate_color_format(solid_polygon_layer)
    validate_auto_highlight(solid_polygon_layer)
    validate_highlight_color(solid_polygon_layer)
    validate_filled(solid_polygon_layer)
    validate_extruded(solid_polygon_layer)
    validate_wireframe(solid_polygon_layer)
    validate_elevation_scale(solid_polygon_layer)
    validate_get_polygon(solid_polygon_layer)
    validate_get_elevation(solid_polygon_layer)
    validate_get_fill_color(solid_polygon_layer)
    validate_get_line_color(solid_polygon_layer)
    validate_material(solid_polygon_layer)
    validate_blending_mode(solid_polygon_layer)
    validate_visibility_toggle(solid_polygon_layer)
    validate_tooltip(solid_polygon_layer)
  })

  add_layer(rdeck, solid_polygon_layer)
}
#' @name solid_polygon_layer
#' @export
update_solid_polygon_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    filled = cur_value(),
    extruded = cur_value(),
    wireframe = cur_value(),
    elevation_scale = cur_value(),
    get_polygon = cur_value(),
    get_elevation = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    material = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_polygon <- rlang::enquo(get_polygon)
  get_elevation <- rlang::enquo(get_elevation)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  tooltip <- rlang::enquo(tooltip)
  solid_polygon_layer <- with_layer_create_errors(
    new_layer(
      type = "SolidPolygonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      filled = filled,
      extruded = extruded,
      wireframe = wireframe,
      elevation_scale = elevation_scale,
      get_polygon = accessor(get_polygon, data),
      get_elevation = accessor(get_elevation, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(solid_polygon_layer)
    validate_name(solid_polygon_layer)
    validate_group_name(solid_polygon_layer)
    validate_data(solid_polygon_layer)
    validate_visible(solid_polygon_layer)
    validate_pickable(solid_polygon_layer)
    validate_opacity(solid_polygon_layer)
    validate_wrap_longitude(solid_polygon_layer)
    validate_position_format(solid_polygon_layer)
    validate_color_format(solid_polygon_layer)
    validate_auto_highlight(solid_polygon_layer)
    validate_highlight_color(solid_polygon_layer)
    validate_filled(solid_polygon_layer)
    validate_extruded(solid_polygon_layer)
    validate_wireframe(solid_polygon_layer)
    validate_elevation_scale(solid_polygon_layer)
    validate_get_polygon(solid_polygon_layer)
    validate_get_elevation(solid_polygon_layer)
    validate_get_fill_color(solid_polygon_layer)
    validate_get_line_color(solid_polygon_layer)
    validate_material(solid_polygon_layer)
    validate_blending_mode(solid_polygon_layer)
    validate_visibility_toggle(solid_polygon_layer)
    validate_tooltip(solid_polygon_layer)
  })

  update_layer(rdeck, solid_polygon_layer)
}

#' @name geojson_layer
#' @autoglobal
#' @export
add_geojson_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "GeoJsonLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    filled = TRUE,
    stroked = TRUE,
    line_width_max_pixels = 9007199254740991,
    line_width_min_pixels = 0,
    line_width_scale = 1,
    line_width_units = "meters",
    point_radius_max_pixels = 9007199254740991,
    point_radius_min_pixels = 0,
    point_radius_scale = 1,
    point_radius_units = "meters",
    point_antialiasing = TRUE,
    point_billboard = FALSE,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_point_radius = 1,
    icon_atlas = NULL,
    icon_mapping = list(),
    icon_size_max_pixels = 9007199254740991,
    icon_size_min_pixels = 0,
    icon_size_scale = 1,
    icon_size_units = "pixels",
    icon_alpha_cutoff = 0.05,
    icon_billboard = TRUE,
    get_icon = icon,
    get_icon_angle = 0,
    get_icon_color = "#000000ff",
    get_icon_pixel_offset = c(0, 0),
    get_icon_size = 1,
    text_size_max_pixels = 9007199254740991,
    text_size_min_pixels = 0,
    text_size_scale = 1,
    text_size_units = "pixels",
    text_background = FALSE,
    text_background_padding = c(0, 0, 0, 0),
    text_font_family = "Roboto, Helvetica, Arial, san-serif",
    text_font_weight = "normal",
    text_line_height = 1,
    text_max_width = -1,
    text_outline_color = "#000000ff",
    text_outline_width = 0,
    text_word_break = "break-word",
    text_billboard = TRUE,
    text_font_settings = list(),
    get_text = text,
    get_text_angle = 0,
    get_text_color = "#000000ff",
    get_text_pixel_offset = c(0, 0),
    get_text_size = 32,
    get_text_anchor = "middle",
    get_text_alignment_baseline = "center",
    get_text_background_color = "#ffffffff",
    get_text_border_color = "#000000ff",
    get_text_border_width = 0,
    line_joint_rounded = FALSE,
    line_cap_rounded = FALSE,
    line_miter_limit = 4,
    line_billboard = FALSE,
    extruded = FALSE,
    wireframe = FALSE,
    elevation_scale = 1,
    material = TRUE,
    get_elevation = 1000,
    point_type = "circle",
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_point_radius <- rlang::enquo(get_point_radius)
  get_icon <- rlang::enquo(get_icon)
  get_icon_angle <- rlang::enquo(get_icon_angle)
  get_icon_color <- rlang::enquo(get_icon_color)
  get_icon_pixel_offset <- rlang::enquo(get_icon_pixel_offset)
  get_icon_size <- rlang::enquo(get_icon_size)
  get_text <- rlang::enquo(get_text)
  get_text_angle <- rlang::enquo(get_text_angle)
  get_text_color <- rlang::enquo(get_text_color)
  get_text_pixel_offset <- rlang::enquo(get_text_pixel_offset)
  get_text_size <- rlang::enquo(get_text_size)
  get_text_anchor <- rlang::enquo(get_text_anchor)
  get_text_alignment_baseline <- rlang::enquo(get_text_alignment_baseline)
  get_text_background_color <- rlang::enquo(get_text_background_color)
  get_text_border_color <- rlang::enquo(get_text_border_color)
  get_text_border_width <- rlang::enquo(get_text_border_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)

  geojson_layer <- with_layer_create_errors(
    new_layer(
      type = "GeoJsonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      filled = filled,
      stroked = stroked,
      line_width_max_pixels = line_width_max_pixels,
      line_width_min_pixels = line_width_min_pixels,
      line_width_scale = line_width_scale,
      line_width_units = line_width_units,
      point_radius_max_pixels = point_radius_max_pixels,
      point_radius_min_pixels = point_radius_min_pixels,
      point_radius_scale = point_radius_scale,
      point_radius_units = point_radius_units,
      point_antialiasing = point_antialiasing,
      point_billboard = point_billboard,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_point_radius = accessor(get_point_radius, data),
      icon_atlas = icon_atlas,
      icon_mapping = icon_mapping,
      icon_size_max_pixels = icon_size_max_pixels,
      icon_size_min_pixels = icon_size_min_pixels,
      icon_size_scale = icon_size_scale,
      icon_size_units = icon_size_units,
      icon_alpha_cutoff = icon_alpha_cutoff,
      icon_billboard = icon_billboard,
      get_icon = accessor(get_icon, data),
      get_icon_angle = accessor(get_icon_angle, data),
      get_icon_color = accessor(get_icon_color, data),
      get_icon_pixel_offset = accessor(get_icon_pixel_offset, data),
      get_icon_size = accessor(get_icon_size, data),
      text_size_max_pixels = text_size_max_pixels,
      text_size_min_pixels = text_size_min_pixels,
      text_size_scale = text_size_scale,
      text_size_units = text_size_units,
      text_background = text_background,
      text_background_padding = text_background_padding,
      text_font_family = text_font_family,
      text_font_weight = text_font_weight,
      text_line_height = text_line_height,
      text_max_width = text_max_width,
      text_outline_color = text_outline_color,
      text_outline_width = text_outline_width,
      text_word_break = text_word_break,
      text_billboard = text_billboard,
      text_font_settings = text_font_settings,
      get_text = accessor(get_text, data),
      get_text_angle = accessor(get_text_angle, data),
      get_text_color = accessor(get_text_color, data),
      get_text_pixel_offset = accessor(get_text_pixel_offset, data),
      get_text_size = accessor(get_text_size, data),
      get_text_anchor = accessor(get_text_anchor, data),
      get_text_alignment_baseline = accessor(get_text_alignment_baseline, data),
      get_text_background_color = accessor(get_text_background_color, data),
      get_text_border_color = accessor(get_text_border_color, data),
      get_text_border_width = accessor(get_text_border_width, data),
      line_joint_rounded = line_joint_rounded,
      line_cap_rounded = line_cap_rounded,
      line_miter_limit = line_miter_limit,
      line_billboard = line_billboard,
      extruded = extruded,
      wireframe = wireframe,
      elevation_scale = elevation_scale,
      material = material,
      get_elevation = accessor(get_elevation, data),
      point_type = point_type,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(geojson_layer)
    validate_name(geojson_layer)
    validate_group_name(geojson_layer)
    validate_data(geojson_layer)
    validate_visible(geojson_layer)
    validate_pickable(geojson_layer)
    validate_opacity(geojson_layer)
    validate_wrap_longitude(geojson_layer)
    validate_position_format(geojson_layer)
    validate_color_format(geojson_layer)
    validate_auto_highlight(geojson_layer)
    validate_highlight_color(geojson_layer)
    validate_filled(geojson_layer)
    validate_stroked(geojson_layer)
    validate_line_width_max_pixels(geojson_layer)
    validate_line_width_min_pixels(geojson_layer)
    validate_line_width_scale(geojson_layer)
    validate_line_width_units(geojson_layer)
    validate_point_radius_max_pixels(geojson_layer)
    validate_point_radius_min_pixels(geojson_layer)
    validate_point_radius_scale(geojson_layer)
    validate_point_radius_units(geojson_layer)
    validate_point_antialiasing(geojson_layer)
    validate_point_billboard(geojson_layer)
    validate_get_fill_color(geojson_layer)
    validate_get_line_color(geojson_layer)
    validate_get_line_width(geojson_layer)
    validate_get_point_radius(geojson_layer)
    validate_icon_atlas(geojson_layer)
    validate_icon_mapping(geojson_layer)
    validate_icon_size_max_pixels(geojson_layer)
    validate_icon_size_min_pixels(geojson_layer)
    validate_icon_size_scale(geojson_layer)
    validate_icon_size_units(geojson_layer)
    validate_icon_alpha_cutoff(geojson_layer)
    validate_icon_billboard(geojson_layer)
    validate_get_icon(geojson_layer)
    validate_get_icon_angle(geojson_layer)
    validate_get_icon_color(geojson_layer)
    validate_get_icon_pixel_offset(geojson_layer)
    validate_get_icon_size(geojson_layer)
    validate_text_size_max_pixels(geojson_layer)
    validate_text_size_min_pixels(geojson_layer)
    validate_text_size_scale(geojson_layer)
    validate_text_size_units(geojson_layer)
    validate_text_background(geojson_layer)
    validate_text_background_padding(geojson_layer)
    validate_text_font_family(geojson_layer)
    validate_text_font_weight(geojson_layer)
    validate_text_line_height(geojson_layer)
    validate_text_max_width(geojson_layer)
    validate_text_outline_color(geojson_layer)
    validate_text_outline_width(geojson_layer)
    validate_text_word_break(geojson_layer)
    validate_text_billboard(geojson_layer)
    validate_text_font_settings(geojson_layer)
    validate_get_text(geojson_layer)
    validate_get_text_angle(geojson_layer)
    validate_get_text_color(geojson_layer)
    validate_get_text_pixel_offset(geojson_layer)
    validate_get_text_size(geojson_layer)
    validate_get_text_anchor(geojson_layer)
    validate_get_text_alignment_baseline(geojson_layer)
    validate_get_text_background_color(geojson_layer)
    validate_get_text_border_color(geojson_layer)
    validate_get_text_border_width(geojson_layer)
    validate_line_joint_rounded(geojson_layer)
    validate_line_cap_rounded(geojson_layer)
    validate_line_miter_limit(geojson_layer)
    validate_line_billboard(geojson_layer)
    validate_extruded(geojson_layer)
    validate_wireframe(geojson_layer)
    validate_elevation_scale(geojson_layer)
    validate_material(geojson_layer)
    validate_get_elevation(geojson_layer)
    validate_point_type(geojson_layer)
    validate_blending_mode(geojson_layer)
    validate_visibility_toggle(geojson_layer)
    validate_tooltip(geojson_layer)
  })

  add_layer(rdeck, geojson_layer)
}
#' @name geojson_layer
#' @export
update_geojson_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    filled = cur_value(),
    stroked = cur_value(),
    line_width_max_pixels = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_scale = cur_value(),
    line_width_units = cur_value(),
    point_radius_max_pixels = cur_value(),
    point_radius_min_pixels = cur_value(),
    point_radius_scale = cur_value(),
    point_radius_units = cur_value(),
    point_antialiasing = cur_value(),
    point_billboard = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_point_radius = cur_value(),
    icon_atlas = cur_value(),
    icon_mapping = cur_value(),
    icon_size_max_pixels = cur_value(),
    icon_size_min_pixels = cur_value(),
    icon_size_scale = cur_value(),
    icon_size_units = cur_value(),
    icon_alpha_cutoff = cur_value(),
    icon_billboard = cur_value(),
    get_icon = cur_value(),
    get_icon_angle = cur_value(),
    get_icon_color = cur_value(),
    get_icon_pixel_offset = cur_value(),
    get_icon_size = cur_value(),
    text_size_max_pixels = cur_value(),
    text_size_min_pixels = cur_value(),
    text_size_scale = cur_value(),
    text_size_units = cur_value(),
    text_background = cur_value(),
    text_background_padding = cur_value(),
    text_font_family = cur_value(),
    text_font_weight = cur_value(),
    text_line_height = cur_value(),
    text_max_width = cur_value(),
    text_outline_color = cur_value(),
    text_outline_width = cur_value(),
    text_word_break = cur_value(),
    text_billboard = cur_value(),
    text_font_settings = cur_value(),
    get_text = cur_value(),
    get_text_angle = cur_value(),
    get_text_color = cur_value(),
    get_text_pixel_offset = cur_value(),
    get_text_size = cur_value(),
    get_text_anchor = cur_value(),
    get_text_alignment_baseline = cur_value(),
    get_text_background_color = cur_value(),
    get_text_border_color = cur_value(),
    get_text_border_width = cur_value(),
    line_joint_rounded = cur_value(),
    line_cap_rounded = cur_value(),
    line_miter_limit = cur_value(),
    line_billboard = cur_value(),
    extruded = cur_value(),
    wireframe = cur_value(),
    elevation_scale = cur_value(),
    material = cur_value(),
    get_elevation = cur_value(),
    point_type = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_point_radius <- rlang::enquo(get_point_radius)
  get_icon <- rlang::enquo(get_icon)
  get_icon_angle <- rlang::enquo(get_icon_angle)
  get_icon_color <- rlang::enquo(get_icon_color)
  get_icon_pixel_offset <- rlang::enquo(get_icon_pixel_offset)
  get_icon_size <- rlang::enquo(get_icon_size)
  get_text <- rlang::enquo(get_text)
  get_text_angle <- rlang::enquo(get_text_angle)
  get_text_color <- rlang::enquo(get_text_color)
  get_text_pixel_offset <- rlang::enquo(get_text_pixel_offset)
  get_text_size <- rlang::enquo(get_text_size)
  get_text_anchor <- rlang::enquo(get_text_anchor)
  get_text_alignment_baseline <- rlang::enquo(get_text_alignment_baseline)
  get_text_background_color <- rlang::enquo(get_text_background_color)
  get_text_border_color <- rlang::enquo(get_text_border_color)
  get_text_border_width <- rlang::enquo(get_text_border_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)
  geojson_layer <- with_layer_create_errors(
    new_layer(
      type = "GeoJsonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      filled = filled,
      stroked = stroked,
      line_width_max_pixels = line_width_max_pixels,
      line_width_min_pixels = line_width_min_pixels,
      line_width_scale = line_width_scale,
      line_width_units = line_width_units,
      point_radius_max_pixels = point_radius_max_pixels,
      point_radius_min_pixels = point_radius_min_pixels,
      point_radius_scale = point_radius_scale,
      point_radius_units = point_radius_units,
      point_antialiasing = point_antialiasing,
      point_billboard = point_billboard,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_point_radius = accessor(get_point_radius, data),
      icon_atlas = icon_atlas,
      icon_mapping = icon_mapping,
      icon_size_max_pixels = icon_size_max_pixels,
      icon_size_min_pixels = icon_size_min_pixels,
      icon_size_scale = icon_size_scale,
      icon_size_units = icon_size_units,
      icon_alpha_cutoff = icon_alpha_cutoff,
      icon_billboard = icon_billboard,
      get_icon = accessor(get_icon, data),
      get_icon_angle = accessor(get_icon_angle, data),
      get_icon_color = accessor(get_icon_color, data),
      get_icon_pixel_offset = accessor(get_icon_pixel_offset, data),
      get_icon_size = accessor(get_icon_size, data),
      text_size_max_pixels = text_size_max_pixels,
      text_size_min_pixels = text_size_min_pixels,
      text_size_scale = text_size_scale,
      text_size_units = text_size_units,
      text_background = text_background,
      text_background_padding = text_background_padding,
      text_font_family = text_font_family,
      text_font_weight = text_font_weight,
      text_line_height = text_line_height,
      text_max_width = text_max_width,
      text_outline_color = text_outline_color,
      text_outline_width = text_outline_width,
      text_word_break = text_word_break,
      text_billboard = text_billboard,
      text_font_settings = text_font_settings,
      get_text = accessor(get_text, data),
      get_text_angle = accessor(get_text_angle, data),
      get_text_color = accessor(get_text_color, data),
      get_text_pixel_offset = accessor(get_text_pixel_offset, data),
      get_text_size = accessor(get_text_size, data),
      get_text_anchor = accessor(get_text_anchor, data),
      get_text_alignment_baseline = accessor(get_text_alignment_baseline, data),
      get_text_background_color = accessor(get_text_background_color, data),
      get_text_border_color = accessor(get_text_border_color, data),
      get_text_border_width = accessor(get_text_border_width, data),
      line_joint_rounded = line_joint_rounded,
      line_cap_rounded = line_cap_rounded,
      line_miter_limit = line_miter_limit,
      line_billboard = line_billboard,
      extruded = extruded,
      wireframe = wireframe,
      elevation_scale = elevation_scale,
      material = material,
      get_elevation = accessor(get_elevation, data),
      point_type = point_type,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(geojson_layer)
    validate_name(geojson_layer)
    validate_group_name(geojson_layer)
    validate_data(geojson_layer)
    validate_visible(geojson_layer)
    validate_pickable(geojson_layer)
    validate_opacity(geojson_layer)
    validate_wrap_longitude(geojson_layer)
    validate_position_format(geojson_layer)
    validate_color_format(geojson_layer)
    validate_auto_highlight(geojson_layer)
    validate_highlight_color(geojson_layer)
    validate_filled(geojson_layer)
    validate_stroked(geojson_layer)
    validate_line_width_max_pixels(geojson_layer)
    validate_line_width_min_pixels(geojson_layer)
    validate_line_width_scale(geojson_layer)
    validate_line_width_units(geojson_layer)
    validate_point_radius_max_pixels(geojson_layer)
    validate_point_radius_min_pixels(geojson_layer)
    validate_point_radius_scale(geojson_layer)
    validate_point_radius_units(geojson_layer)
    validate_point_antialiasing(geojson_layer)
    validate_point_billboard(geojson_layer)
    validate_get_fill_color(geojson_layer)
    validate_get_line_color(geojson_layer)
    validate_get_line_width(geojson_layer)
    validate_get_point_radius(geojson_layer)
    validate_icon_atlas(geojson_layer)
    validate_icon_mapping(geojson_layer)
    validate_icon_size_max_pixels(geojson_layer)
    validate_icon_size_min_pixels(geojson_layer)
    validate_icon_size_scale(geojson_layer)
    validate_icon_size_units(geojson_layer)
    validate_icon_alpha_cutoff(geojson_layer)
    validate_icon_billboard(geojson_layer)
    validate_get_icon(geojson_layer)
    validate_get_icon_angle(geojson_layer)
    validate_get_icon_color(geojson_layer)
    validate_get_icon_pixel_offset(geojson_layer)
    validate_get_icon_size(geojson_layer)
    validate_text_size_max_pixels(geojson_layer)
    validate_text_size_min_pixels(geojson_layer)
    validate_text_size_scale(geojson_layer)
    validate_text_size_units(geojson_layer)
    validate_text_background(geojson_layer)
    validate_text_background_padding(geojson_layer)
    validate_text_font_family(geojson_layer)
    validate_text_font_weight(geojson_layer)
    validate_text_line_height(geojson_layer)
    validate_text_max_width(geojson_layer)
    validate_text_outline_color(geojson_layer)
    validate_text_outline_width(geojson_layer)
    validate_text_word_break(geojson_layer)
    validate_text_billboard(geojson_layer)
    validate_text_font_settings(geojson_layer)
    validate_get_text(geojson_layer)
    validate_get_text_angle(geojson_layer)
    validate_get_text_color(geojson_layer)
    validate_get_text_pixel_offset(geojson_layer)
    validate_get_text_size(geojson_layer)
    validate_get_text_anchor(geojson_layer)
    validate_get_text_alignment_baseline(geojson_layer)
    validate_get_text_background_color(geojson_layer)
    validate_get_text_border_color(geojson_layer)
    validate_get_text_border_width(geojson_layer)
    validate_line_joint_rounded(geojson_layer)
    validate_line_cap_rounded(geojson_layer)
    validate_line_miter_limit(geojson_layer)
    validate_line_billboard(geojson_layer)
    validate_extruded(geojson_layer)
    validate_wireframe(geojson_layer)
    validate_elevation_scale(geojson_layer)
    validate_material(geojson_layer)
    validate_get_elevation(geojson_layer)
    validate_point_type(geojson_layer)
    validate_blending_mode(geojson_layer)
    validate_visibility_toggle(geojson_layer)
    validate_tooltip(geojson_layer)
  })

  update_layer(rdeck, geojson_layer)
}

#' @name text_layer
#' @autoglobal
#' @export
add_text_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "TextLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    billboard = TRUE,
    size_scale = 1,
    size_units = "pixels",
    size_min_pixels = 0,
    size_max_pixels = 9007199254740991,
    background = FALSE,
    get_background_color = "#ffffffff",
    get_border_color = "#000000ff",
    get_border_width = 0,
    background_padding = c(0, 0, 0, 0),
    font_family = "Roboto, Helvetica, Arial, san-serif",
    font_weight = "normal",
    line_height = 1,
    outline_width = 0,
    outline_color = "#000000ff",
    font_settings = list(),
    word_break = "break-word",
    max_width = -1,
    get_text = text,
    get_position = position,
    get_color = "#000000ff",
    get_size = 32,
    get_angle = 0,
    get_text_anchor = "middle",
    get_alignment_baseline = "center",
    get_pixel_offset = c(0, 0),
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_background_color <- rlang::enquo(get_background_color)
  get_border_color <- rlang::enquo(get_border_color)
  get_border_width <- rlang::enquo(get_border_width)
  get_text <- rlang::enquo(get_text)
  get_position <- rlang::enquo(get_position)
  get_color <- rlang::enquo(get_color)
  get_size <- rlang::enquo(get_size)
  get_angle <- rlang::enquo(get_angle)
  get_text_anchor <- rlang::enquo(get_text_anchor)
  get_alignment_baseline <- rlang::enquo(get_alignment_baseline)
  get_pixel_offset <- rlang::enquo(get_pixel_offset)
  tooltip <- rlang::enquo(tooltip)

  text_layer <- with_layer_create_errors(
    new_layer(
      type = "TextLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      billboard = billboard,
      size_scale = size_scale,
      size_units = size_units,
      size_min_pixels = size_min_pixels,
      size_max_pixels = size_max_pixels,
      background = background,
      get_background_color = accessor(get_background_color, data),
      get_border_color = accessor(get_border_color, data),
      get_border_width = accessor(get_border_width, data),
      background_padding = background_padding,
      font_family = font_family,
      font_weight = font_weight,
      line_height = line_height,
      outline_width = outline_width,
      outline_color = outline_color,
      font_settings = font_settings,
      word_break = word_break,
      max_width = max_width,
      get_text = accessor(get_text, data),
      get_position = accessor(get_position, data),
      get_color = accessor(get_color, data),
      get_size = accessor(get_size, data),
      get_angle = accessor(get_angle, data),
      get_text_anchor = accessor(get_text_anchor, data),
      get_alignment_baseline = accessor(get_alignment_baseline, data),
      get_pixel_offset = accessor(get_pixel_offset, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(text_layer)
    validate_name(text_layer)
    validate_group_name(text_layer)
    validate_data(text_layer)
    validate_visible(text_layer)
    validate_pickable(text_layer)
    validate_opacity(text_layer)
    validate_wrap_longitude(text_layer)
    validate_position_format(text_layer)
    validate_color_format(text_layer)
    validate_auto_highlight(text_layer)
    validate_highlight_color(text_layer)
    validate_billboard(text_layer)
    validate_size_scale(text_layer)
    validate_size_units(text_layer)
    validate_size_min_pixels(text_layer)
    validate_size_max_pixels(text_layer)
    validate_background(text_layer)
    validate_get_background_color(text_layer)
    validate_get_border_color(text_layer)
    validate_get_border_width(text_layer)
    validate_background_padding(text_layer)
    validate_font_family(text_layer)
    validate_font_weight(text_layer)
    validate_line_height(text_layer)
    validate_outline_width(text_layer)
    validate_outline_color(text_layer)
    validate_font_settings(text_layer)
    validate_word_break(text_layer)
    validate_max_width(text_layer)
    validate_get_text(text_layer)
    validate_get_position(text_layer)
    validate_get_color(text_layer)
    validate_get_size(text_layer)
    validate_get_angle(text_layer)
    validate_get_text_anchor(text_layer)
    validate_get_alignment_baseline(text_layer)
    validate_get_pixel_offset(text_layer)
    validate_blending_mode(text_layer)
    validate_visibility_toggle(text_layer)
    validate_tooltip(text_layer)
  })

  add_layer(rdeck, text_layer)
}
#' @name text_layer
#' @export
update_text_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    billboard = cur_value(),
    size_scale = cur_value(),
    size_units = cur_value(),
    size_min_pixels = cur_value(),
    size_max_pixels = cur_value(),
    background = cur_value(),
    get_background_color = cur_value(),
    get_border_color = cur_value(),
    get_border_width = cur_value(),
    background_padding = cur_value(),
    font_family = cur_value(),
    font_weight = cur_value(),
    line_height = cur_value(),
    outline_width = cur_value(),
    outline_color = cur_value(),
    font_settings = cur_value(),
    word_break = cur_value(),
    max_width = cur_value(),
    get_text = cur_value(),
    get_position = cur_value(),
    get_color = cur_value(),
    get_size = cur_value(),
    get_angle = cur_value(),
    get_text_anchor = cur_value(),
    get_alignment_baseline = cur_value(),
    get_pixel_offset = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_background_color <- rlang::enquo(get_background_color)
  get_border_color <- rlang::enquo(get_border_color)
  get_border_width <- rlang::enquo(get_border_width)
  get_text <- rlang::enquo(get_text)
  get_position <- rlang::enquo(get_position)
  get_color <- rlang::enquo(get_color)
  get_size <- rlang::enquo(get_size)
  get_angle <- rlang::enquo(get_angle)
  get_text_anchor <- rlang::enquo(get_text_anchor)
  get_alignment_baseline <- rlang::enquo(get_alignment_baseline)
  get_pixel_offset <- rlang::enquo(get_pixel_offset)
  tooltip <- rlang::enquo(tooltip)
  text_layer <- with_layer_create_errors(
    new_layer(
      type = "TextLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      billboard = billboard,
      size_scale = size_scale,
      size_units = size_units,
      size_min_pixels = size_min_pixels,
      size_max_pixels = size_max_pixels,
      background = background,
      get_background_color = accessor(get_background_color, data),
      get_border_color = accessor(get_border_color, data),
      get_border_width = accessor(get_border_width, data),
      background_padding = background_padding,
      font_family = font_family,
      font_weight = font_weight,
      line_height = line_height,
      outline_width = outline_width,
      outline_color = outline_color,
      font_settings = font_settings,
      word_break = word_break,
      max_width = max_width,
      get_text = accessor(get_text, data),
      get_position = accessor(get_position, data),
      get_color = accessor(get_color, data),
      get_size = accessor(get_size, data),
      get_angle = accessor(get_angle, data),
      get_text_anchor = accessor(get_text_anchor, data),
      get_alignment_baseline = accessor(get_alignment_baseline, data),
      get_pixel_offset = accessor(get_pixel_offset, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(text_layer)
    validate_name(text_layer)
    validate_group_name(text_layer)
    validate_data(text_layer)
    validate_visible(text_layer)
    validate_pickable(text_layer)
    validate_opacity(text_layer)
    validate_wrap_longitude(text_layer)
    validate_position_format(text_layer)
    validate_color_format(text_layer)
    validate_auto_highlight(text_layer)
    validate_highlight_color(text_layer)
    validate_billboard(text_layer)
    validate_size_scale(text_layer)
    validate_size_units(text_layer)
    validate_size_min_pixels(text_layer)
    validate_size_max_pixels(text_layer)
    validate_background(text_layer)
    validate_get_background_color(text_layer)
    validate_get_border_color(text_layer)
    validate_get_border_width(text_layer)
    validate_background_padding(text_layer)
    validate_font_family(text_layer)
    validate_font_weight(text_layer)
    validate_line_height(text_layer)
    validate_outline_width(text_layer)
    validate_outline_color(text_layer)
    validate_font_settings(text_layer)
    validate_word_break(text_layer)
    validate_max_width(text_layer)
    validate_get_text(text_layer)
    validate_get_position(text_layer)
    validate_get_color(text_layer)
    validate_get_size(text_layer)
    validate_get_angle(text_layer)
    validate_get_text_anchor(text_layer)
    validate_get_alignment_baseline(text_layer)
    validate_get_pixel_offset(text_layer)
    validate_blending_mode(text_layer)
    validate_visibility_toggle(text_layer)
    validate_tooltip(text_layer)
  })

  update_layer(rdeck, text_layer)
}

#' @name screen_grid_layer
#' @autoglobal
#' @export
add_screen_grid_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "ScreenGridLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    cell_size_pixels = 100,
    cell_margin_pixels = 2,
    color_domain = NULL,
    color_range = c("#ffffb2", "#fed976", "#feb24c", "#fd8d3c", "#f03b20", "#bd0026"),
    get_position = position,
    get_weight = 1,
    gpu_aggregation = TRUE,
    aggregation = "SUM",
    blending_mode = "normal",
    visibility_toggle = TRUE) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_weight <- rlang::enquo(get_weight)

  screen_grid_layer <- with_layer_create_errors(
    new_layer(
      type = "ScreenGridLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      cell_size_pixels = cell_size_pixels,
      cell_margin_pixels = cell_margin_pixels,
      color_domain = color_domain,
      color_range = color_range,
      get_position = accessor(get_position, data),
      get_weight = accessor(get_weight, data),
      gpu_aggregation = gpu_aggregation,
      aggregation = aggregation,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(screen_grid_layer)
    validate_name(screen_grid_layer)
    validate_group_name(screen_grid_layer)
    validate_data(screen_grid_layer)
    validate_visible(screen_grid_layer)
    validate_pickable(screen_grid_layer)
    validate_opacity(screen_grid_layer)
    validate_wrap_longitude(screen_grid_layer)
    validate_position_format(screen_grid_layer)
    validate_color_format(screen_grid_layer)
    validate_auto_highlight(screen_grid_layer)
    validate_highlight_color(screen_grid_layer)
    validate_cell_size_pixels(screen_grid_layer)
    validate_cell_margin_pixels(screen_grid_layer)
    validate_color_domain(screen_grid_layer)
    validate_color_range(screen_grid_layer)
    validate_get_position(screen_grid_layer)
    validate_get_weight(screen_grid_layer)
    validate_gpu_aggregation(screen_grid_layer)
    validate_aggregation(screen_grid_layer)
    validate_blending_mode(screen_grid_layer)
    validate_visibility_toggle(screen_grid_layer)
  })

  add_layer(rdeck, screen_grid_layer)
}
#' @name screen_grid_layer
#' @export
update_screen_grid_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    cell_size_pixels = cur_value(),
    cell_margin_pixels = cur_value(),
    color_domain = cur_value(),
    color_range = cur_value(),
    get_position = cur_value(),
    get_weight = cur_value(),
    gpu_aggregation = cur_value(),
    aggregation = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_weight <- rlang::enquo(get_weight)
  screen_grid_layer <- with_layer_create_errors(
    new_layer(
      type = "ScreenGridLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      cell_size_pixels = cell_size_pixels,
      cell_margin_pixels = cell_margin_pixels,
      color_domain = color_domain,
      color_range = color_range,
      get_position = accessor(get_position, data),
      get_weight = accessor(get_weight, data),
      gpu_aggregation = gpu_aggregation,
      aggregation = aggregation,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(screen_grid_layer)
    validate_name(screen_grid_layer)
    validate_group_name(screen_grid_layer)
    validate_data(screen_grid_layer)
    validate_visible(screen_grid_layer)
    validate_pickable(screen_grid_layer)
    validate_opacity(screen_grid_layer)
    validate_wrap_longitude(screen_grid_layer)
    validate_position_format(screen_grid_layer)
    validate_color_format(screen_grid_layer)
    validate_auto_highlight(screen_grid_layer)
    validate_highlight_color(screen_grid_layer)
    validate_cell_size_pixels(screen_grid_layer)
    validate_cell_margin_pixels(screen_grid_layer)
    validate_color_domain(screen_grid_layer)
    validate_color_range(screen_grid_layer)
    validate_get_position(screen_grid_layer)
    validate_get_weight(screen_grid_layer)
    validate_gpu_aggregation(screen_grid_layer)
    validate_aggregation(screen_grid_layer)
    validate_blending_mode(screen_grid_layer)
    validate_visibility_toggle(screen_grid_layer)
  })

  update_layer(rdeck, screen_grid_layer)
}

#' @name cpu_grid_layer
#' @autoglobal
#' @export
add_cpu_grid_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "CPUGridLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    color_domain = NULL,
    color_range = c("#ffffb2", "#fed976", "#feb24c", "#fd8d3c", "#f03b20", "#bd0026"),
    get_color_value = NULL,
    get_color_weight = 1,
    color_aggregation = "SUM",
    lower_percentile = 0,
    upper_percentile = 100,
    color_scale_type = "quantize",
    elevation_domain = NULL,
    elevation_range = c(0, 1000),
    get_elevation_value = NULL,
    get_elevation_weight = 1,
    elevation_aggregation = "SUM",
    elevation_lower_percentile = 0,
    elevation_upper_percentile = 100,
    elevation_scale = 1,
    elevation_scale_type = "linear",
    cell_size = 1000,
    coverage = 1,
    get_position = position,
    extruded = FALSE,
    material = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_color_weight <- rlang::enquo(get_color_weight)
  get_elevation_weight <- rlang::enquo(get_elevation_weight)
  get_position <- rlang::enquo(get_position)

  cpu_grid_layer <- with_layer_create_errors(
    new_layer(
      type = "CPUGridLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      color_domain = color_domain,
      color_range = color_range,
      get_color_value = get_color_value,
      get_color_weight = accessor(get_color_weight, data),
      color_aggregation = color_aggregation,
      lower_percentile = lower_percentile,
      upper_percentile = upper_percentile,
      color_scale_type = color_scale_type,
      elevation_domain = elevation_domain,
      elevation_range = elevation_range,
      get_elevation_value = get_elevation_value,
      get_elevation_weight = accessor(get_elevation_weight, data),
      elevation_aggregation = elevation_aggregation,
      elevation_lower_percentile = elevation_lower_percentile,
      elevation_upper_percentile = elevation_upper_percentile,
      elevation_scale = elevation_scale,
      elevation_scale_type = elevation_scale_type,
      cell_size = cell_size,
      coverage = coverage,
      get_position = accessor(get_position, data),
      extruded = extruded,
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(cpu_grid_layer)
    validate_name(cpu_grid_layer)
    validate_group_name(cpu_grid_layer)
    validate_data(cpu_grid_layer)
    validate_visible(cpu_grid_layer)
    validate_pickable(cpu_grid_layer)
    validate_opacity(cpu_grid_layer)
    validate_wrap_longitude(cpu_grid_layer)
    validate_position_format(cpu_grid_layer)
    validate_color_format(cpu_grid_layer)
    validate_auto_highlight(cpu_grid_layer)
    validate_highlight_color(cpu_grid_layer)
    validate_color_domain(cpu_grid_layer)
    validate_color_range(cpu_grid_layer)
    validate_get_color_value(cpu_grid_layer)
    validate_get_color_weight(cpu_grid_layer)
    validate_color_aggregation(cpu_grid_layer)
    validate_lower_percentile(cpu_grid_layer)
    validate_upper_percentile(cpu_grid_layer)
    validate_color_scale_type(cpu_grid_layer)
    validate_elevation_domain(cpu_grid_layer)
    validate_elevation_range(cpu_grid_layer)
    validate_get_elevation_value(cpu_grid_layer)
    validate_get_elevation_weight(cpu_grid_layer)
    validate_elevation_aggregation(cpu_grid_layer)
    validate_elevation_lower_percentile(cpu_grid_layer)
    validate_elevation_upper_percentile(cpu_grid_layer)
    validate_elevation_scale(cpu_grid_layer)
    validate_elevation_scale_type(cpu_grid_layer)
    validate_cell_size(cpu_grid_layer)
    validate_coverage(cpu_grid_layer)
    validate_get_position(cpu_grid_layer)
    validate_extruded(cpu_grid_layer)
    validate_material(cpu_grid_layer)
    validate_blending_mode(cpu_grid_layer)
    validate_visibility_toggle(cpu_grid_layer)
  })

  add_layer(rdeck, cpu_grid_layer)
}
#' @name cpu_grid_layer
#' @export
update_cpu_grid_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    color_domain = cur_value(),
    color_range = cur_value(),
    get_color_value = cur_value(),
    get_color_weight = cur_value(),
    color_aggregation = cur_value(),
    lower_percentile = cur_value(),
    upper_percentile = cur_value(),
    color_scale_type = cur_value(),
    elevation_domain = cur_value(),
    elevation_range = cur_value(),
    get_elevation_value = cur_value(),
    get_elevation_weight = cur_value(),
    elevation_aggregation = cur_value(),
    elevation_lower_percentile = cur_value(),
    elevation_upper_percentile = cur_value(),
    elevation_scale = cur_value(),
    elevation_scale_type = cur_value(),
    cell_size = cur_value(),
    coverage = cur_value(),
    get_position = cur_value(),
    extruded = cur_value(),
    material = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_color_weight <- rlang::enquo(get_color_weight)
  get_elevation_weight <- rlang::enquo(get_elevation_weight)
  get_position <- rlang::enquo(get_position)
  cpu_grid_layer <- with_layer_create_errors(
    new_layer(
      type = "CPUGridLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      color_domain = color_domain,
      color_range = color_range,
      get_color_value = get_color_value,
      get_color_weight = accessor(get_color_weight, data),
      color_aggregation = color_aggregation,
      lower_percentile = lower_percentile,
      upper_percentile = upper_percentile,
      color_scale_type = color_scale_type,
      elevation_domain = elevation_domain,
      elevation_range = elevation_range,
      get_elevation_value = get_elevation_value,
      get_elevation_weight = accessor(get_elevation_weight, data),
      elevation_aggregation = elevation_aggregation,
      elevation_lower_percentile = elevation_lower_percentile,
      elevation_upper_percentile = elevation_upper_percentile,
      elevation_scale = elevation_scale,
      elevation_scale_type = elevation_scale_type,
      cell_size = cell_size,
      coverage = coverage,
      get_position = accessor(get_position, data),
      extruded = extruded,
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(cpu_grid_layer)
    validate_name(cpu_grid_layer)
    validate_group_name(cpu_grid_layer)
    validate_data(cpu_grid_layer)
    validate_visible(cpu_grid_layer)
    validate_pickable(cpu_grid_layer)
    validate_opacity(cpu_grid_layer)
    validate_wrap_longitude(cpu_grid_layer)
    validate_position_format(cpu_grid_layer)
    validate_color_format(cpu_grid_layer)
    validate_auto_highlight(cpu_grid_layer)
    validate_highlight_color(cpu_grid_layer)
    validate_color_domain(cpu_grid_layer)
    validate_color_range(cpu_grid_layer)
    validate_get_color_value(cpu_grid_layer)
    validate_get_color_weight(cpu_grid_layer)
    validate_color_aggregation(cpu_grid_layer)
    validate_lower_percentile(cpu_grid_layer)
    validate_upper_percentile(cpu_grid_layer)
    validate_color_scale_type(cpu_grid_layer)
    validate_elevation_domain(cpu_grid_layer)
    validate_elevation_range(cpu_grid_layer)
    validate_get_elevation_value(cpu_grid_layer)
    validate_get_elevation_weight(cpu_grid_layer)
    validate_elevation_aggregation(cpu_grid_layer)
    validate_elevation_lower_percentile(cpu_grid_layer)
    validate_elevation_upper_percentile(cpu_grid_layer)
    validate_elevation_scale(cpu_grid_layer)
    validate_elevation_scale_type(cpu_grid_layer)
    validate_cell_size(cpu_grid_layer)
    validate_coverage(cpu_grid_layer)
    validate_get_position(cpu_grid_layer)
    validate_extruded(cpu_grid_layer)
    validate_material(cpu_grid_layer)
    validate_blending_mode(cpu_grid_layer)
    validate_visibility_toggle(cpu_grid_layer)
  })

  update_layer(rdeck, cpu_grid_layer)
}

#' @name hexagon_layer
#' @autoglobal
#' @export
add_hexagon_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "HexagonLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    color_domain = NULL,
    color_range = c("#ffffb2", "#fed976", "#feb24c", "#fd8d3c", "#f03b20", "#bd0026"),
    get_color_value = NULL,
    get_color_weight = 1,
    color_aggregation = "SUM",
    lower_percentile = 0,
    upper_percentile = 100,
    color_scale_type = "quantize",
    elevation_domain = NULL,
    elevation_range = c(0, 1000),
    get_elevation_value = NULL,
    get_elevation_weight = 1,
    elevation_aggregation = "SUM",
    elevation_lower_percentile = 0,
    elevation_upper_percentile = 100,
    elevation_scale = 1,
    elevation_scale_type = "linear",
    radius = 1000,
    coverage = 1,
    extruded = FALSE,
    get_position = position,
    material = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_color_weight <- rlang::enquo(get_color_weight)
  get_elevation_weight <- rlang::enquo(get_elevation_weight)
  get_position <- rlang::enquo(get_position)

  hexagon_layer <- with_layer_create_errors(
    new_layer(
      type = "HexagonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      color_domain = color_domain,
      color_range = color_range,
      get_color_value = get_color_value,
      get_color_weight = accessor(get_color_weight, data),
      color_aggregation = color_aggregation,
      lower_percentile = lower_percentile,
      upper_percentile = upper_percentile,
      color_scale_type = color_scale_type,
      elevation_domain = elevation_domain,
      elevation_range = elevation_range,
      get_elevation_value = get_elevation_value,
      get_elevation_weight = accessor(get_elevation_weight, data),
      elevation_aggregation = elevation_aggregation,
      elevation_lower_percentile = elevation_lower_percentile,
      elevation_upper_percentile = elevation_upper_percentile,
      elevation_scale = elevation_scale,
      elevation_scale_type = elevation_scale_type,
      radius = radius,
      coverage = coverage,
      extruded = extruded,
      get_position = accessor(get_position, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(hexagon_layer)
    validate_name(hexagon_layer)
    validate_group_name(hexagon_layer)
    validate_data(hexagon_layer)
    validate_visible(hexagon_layer)
    validate_pickable(hexagon_layer)
    validate_opacity(hexagon_layer)
    validate_wrap_longitude(hexagon_layer)
    validate_position_format(hexagon_layer)
    validate_color_format(hexagon_layer)
    validate_auto_highlight(hexagon_layer)
    validate_highlight_color(hexagon_layer)
    validate_color_domain(hexagon_layer)
    validate_color_range(hexagon_layer)
    validate_get_color_value(hexagon_layer)
    validate_get_color_weight(hexagon_layer)
    validate_color_aggregation(hexagon_layer)
    validate_lower_percentile(hexagon_layer)
    validate_upper_percentile(hexagon_layer)
    validate_color_scale_type(hexagon_layer)
    validate_elevation_domain(hexagon_layer)
    validate_elevation_range(hexagon_layer)
    validate_get_elevation_value(hexagon_layer)
    validate_get_elevation_weight(hexagon_layer)
    validate_elevation_aggregation(hexagon_layer)
    validate_elevation_lower_percentile(hexagon_layer)
    validate_elevation_upper_percentile(hexagon_layer)
    validate_elevation_scale(hexagon_layer)
    validate_elevation_scale_type(hexagon_layer)
    validate_radius(hexagon_layer)
    validate_coverage(hexagon_layer)
    validate_extruded(hexagon_layer)
    validate_get_position(hexagon_layer)
    validate_material(hexagon_layer)
    validate_blending_mode(hexagon_layer)
    validate_visibility_toggle(hexagon_layer)
  })

  add_layer(rdeck, hexagon_layer)
}
#' @name hexagon_layer
#' @export
update_hexagon_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    color_domain = cur_value(),
    color_range = cur_value(),
    get_color_value = cur_value(),
    get_color_weight = cur_value(),
    color_aggregation = cur_value(),
    lower_percentile = cur_value(),
    upper_percentile = cur_value(),
    color_scale_type = cur_value(),
    elevation_domain = cur_value(),
    elevation_range = cur_value(),
    get_elevation_value = cur_value(),
    get_elevation_weight = cur_value(),
    elevation_aggregation = cur_value(),
    elevation_lower_percentile = cur_value(),
    elevation_upper_percentile = cur_value(),
    elevation_scale = cur_value(),
    elevation_scale_type = cur_value(),
    radius = cur_value(),
    coverage = cur_value(),
    extruded = cur_value(),
    get_position = cur_value(),
    material = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_color_weight <- rlang::enquo(get_color_weight)
  get_elevation_weight <- rlang::enquo(get_elevation_weight)
  get_position <- rlang::enquo(get_position)
  hexagon_layer <- with_layer_create_errors(
    new_layer(
      type = "HexagonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      color_domain = color_domain,
      color_range = color_range,
      get_color_value = get_color_value,
      get_color_weight = accessor(get_color_weight, data),
      color_aggregation = color_aggregation,
      lower_percentile = lower_percentile,
      upper_percentile = upper_percentile,
      color_scale_type = color_scale_type,
      elevation_domain = elevation_domain,
      elevation_range = elevation_range,
      get_elevation_value = get_elevation_value,
      get_elevation_weight = accessor(get_elevation_weight, data),
      elevation_aggregation = elevation_aggregation,
      elevation_lower_percentile = elevation_lower_percentile,
      elevation_upper_percentile = elevation_upper_percentile,
      elevation_scale = elevation_scale,
      elevation_scale_type = elevation_scale_type,
      radius = radius,
      coverage = coverage,
      extruded = extruded,
      get_position = accessor(get_position, data),
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(hexagon_layer)
    validate_name(hexagon_layer)
    validate_group_name(hexagon_layer)
    validate_data(hexagon_layer)
    validate_visible(hexagon_layer)
    validate_pickable(hexagon_layer)
    validate_opacity(hexagon_layer)
    validate_wrap_longitude(hexagon_layer)
    validate_position_format(hexagon_layer)
    validate_color_format(hexagon_layer)
    validate_auto_highlight(hexagon_layer)
    validate_highlight_color(hexagon_layer)
    validate_color_domain(hexagon_layer)
    validate_color_range(hexagon_layer)
    validate_get_color_value(hexagon_layer)
    validate_get_color_weight(hexagon_layer)
    validate_color_aggregation(hexagon_layer)
    validate_lower_percentile(hexagon_layer)
    validate_upper_percentile(hexagon_layer)
    validate_color_scale_type(hexagon_layer)
    validate_elevation_domain(hexagon_layer)
    validate_elevation_range(hexagon_layer)
    validate_get_elevation_value(hexagon_layer)
    validate_get_elevation_weight(hexagon_layer)
    validate_elevation_aggregation(hexagon_layer)
    validate_elevation_lower_percentile(hexagon_layer)
    validate_elevation_upper_percentile(hexagon_layer)
    validate_elevation_scale(hexagon_layer)
    validate_elevation_scale_type(hexagon_layer)
    validate_radius(hexagon_layer)
    validate_coverage(hexagon_layer)
    validate_extruded(hexagon_layer)
    validate_get_position(hexagon_layer)
    validate_material(hexagon_layer)
    validate_blending_mode(hexagon_layer)
    validate_visibility_toggle(hexagon_layer)
  })

  update_layer(rdeck, hexagon_layer)
}

#' @name contour_layer
#' @autoglobal
#' @export
add_contour_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "ContourLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    cell_size = 1000,
    get_position = position,
    get_weight = 1,
    gpu_aggregation = TRUE,
    aggregation = "SUM",
    contours = c(list(threshold = 1)),
    z_offset = 0.005,
    blending_mode = "normal",
    visibility_toggle = TRUE) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_weight <- rlang::enquo(get_weight)

  contour_layer <- with_layer_create_errors(
    new_layer(
      type = "ContourLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      cell_size = cell_size,
      get_position = accessor(get_position, data),
      get_weight = accessor(get_weight, data),
      gpu_aggregation = gpu_aggregation,
      aggregation = aggregation,
      contours = contours,
      z_offset = z_offset,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(contour_layer)
    validate_name(contour_layer)
    validate_group_name(contour_layer)
    validate_data(contour_layer)
    validate_visible(contour_layer)
    validate_pickable(contour_layer)
    validate_opacity(contour_layer)
    validate_wrap_longitude(contour_layer)
    validate_position_format(contour_layer)
    validate_color_format(contour_layer)
    validate_auto_highlight(contour_layer)
    validate_highlight_color(contour_layer)
    validate_cell_size(contour_layer)
    validate_get_position(contour_layer)
    validate_get_weight(contour_layer)
    validate_gpu_aggregation(contour_layer)
    validate_aggregation(contour_layer)
    validate_contours(contour_layer)
    validate_z_offset(contour_layer)
    validate_blending_mode(contour_layer)
    validate_visibility_toggle(contour_layer)
  })

  add_layer(rdeck, contour_layer)
}
#' @name contour_layer
#' @export
update_contour_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    cell_size = cur_value(),
    get_position = cur_value(),
    get_weight = cur_value(),
    gpu_aggregation = cur_value(),
    aggregation = cur_value(),
    contours = cur_value(),
    z_offset = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_weight <- rlang::enquo(get_weight)
  contour_layer <- with_layer_create_errors(
    new_layer(
      type = "ContourLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      cell_size = cell_size,
      get_position = accessor(get_position, data),
      get_weight = accessor(get_weight, data),
      gpu_aggregation = gpu_aggregation,
      aggregation = aggregation,
      contours = contours,
      z_offset = z_offset,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(contour_layer)
    validate_name(contour_layer)
    validate_group_name(contour_layer)
    validate_data(contour_layer)
    validate_visible(contour_layer)
    validate_pickable(contour_layer)
    validate_opacity(contour_layer)
    validate_wrap_longitude(contour_layer)
    validate_position_format(contour_layer)
    validate_color_format(contour_layer)
    validate_auto_highlight(contour_layer)
    validate_highlight_color(contour_layer)
    validate_cell_size(contour_layer)
    validate_get_position(contour_layer)
    validate_get_weight(contour_layer)
    validate_gpu_aggregation(contour_layer)
    validate_aggregation(contour_layer)
    validate_contours(contour_layer)
    validate_z_offset(contour_layer)
    validate_blending_mode(contour_layer)
    validate_visibility_toggle(contour_layer)
  })

  update_layer(rdeck, contour_layer)
}

#' @name grid_layer
#' @autoglobal
#' @export
add_grid_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "GridLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    color_domain = NULL,
    color_range = c("#ffffb2", "#fed976", "#feb24c", "#fd8d3c", "#f03b20", "#bd0026"),
    get_color_weight = 1,
    color_aggregation = "SUM",
    elevation_domain = NULL,
    elevation_range = c(0, 1000),
    get_elevation_weight = 1,
    elevation_aggregation = "SUM",
    elevation_scale = 1,
    cell_size = 1000,
    coverage = 1,
    get_position = position,
    extruded = FALSE,
    material = TRUE,
    get_color_value = NULL,
    lower_percentile = 0,
    upper_percentile = 100,
    color_scale_type = "quantize",
    get_elevation_value = NULL,
    elevation_lower_percentile = 0,
    elevation_upper_percentile = 100,
    elevation_scale_type = "linear",
    gpu_aggregation = FALSE,
    blending_mode = "normal",
    visibility_toggle = TRUE) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_color_weight <- rlang::enquo(get_color_weight)
  get_elevation_weight <- rlang::enquo(get_elevation_weight)
  get_position <- rlang::enquo(get_position)

  grid_layer <- with_layer_create_errors(
    new_layer(
      type = "GridLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      color_domain = color_domain,
      color_range = color_range,
      get_color_weight = accessor(get_color_weight, data),
      color_aggregation = color_aggregation,
      elevation_domain = elevation_domain,
      elevation_range = elevation_range,
      get_elevation_weight = accessor(get_elevation_weight, data),
      elevation_aggregation = elevation_aggregation,
      elevation_scale = elevation_scale,
      cell_size = cell_size,
      coverage = coverage,
      get_position = accessor(get_position, data),
      extruded = extruded,
      material = material,
      get_color_value = get_color_value,
      lower_percentile = lower_percentile,
      upper_percentile = upper_percentile,
      color_scale_type = color_scale_type,
      get_elevation_value = get_elevation_value,
      elevation_lower_percentile = elevation_lower_percentile,
      elevation_upper_percentile = elevation_upper_percentile,
      elevation_scale_type = elevation_scale_type,
      gpu_aggregation = gpu_aggregation,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(grid_layer)
    validate_name(grid_layer)
    validate_group_name(grid_layer)
    validate_data(grid_layer)
    validate_visible(grid_layer)
    validate_pickable(grid_layer)
    validate_opacity(grid_layer)
    validate_wrap_longitude(grid_layer)
    validate_position_format(grid_layer)
    validate_color_format(grid_layer)
    validate_auto_highlight(grid_layer)
    validate_highlight_color(grid_layer)
    validate_color_domain(grid_layer)
    validate_color_range(grid_layer)
    validate_get_color_weight(grid_layer)
    validate_color_aggregation(grid_layer)
    validate_elevation_domain(grid_layer)
    validate_elevation_range(grid_layer)
    validate_get_elevation_weight(grid_layer)
    validate_elevation_aggregation(grid_layer)
    validate_elevation_scale(grid_layer)
    validate_cell_size(grid_layer)
    validate_coverage(grid_layer)
    validate_get_position(grid_layer)
    validate_extruded(grid_layer)
    validate_material(grid_layer)
    validate_get_color_value(grid_layer)
    validate_lower_percentile(grid_layer)
    validate_upper_percentile(grid_layer)
    validate_color_scale_type(grid_layer)
    validate_get_elevation_value(grid_layer)
    validate_elevation_lower_percentile(grid_layer)
    validate_elevation_upper_percentile(grid_layer)
    validate_elevation_scale_type(grid_layer)
    validate_gpu_aggregation(grid_layer)
    validate_blending_mode(grid_layer)
    validate_visibility_toggle(grid_layer)
  })

  add_layer(rdeck, grid_layer)
}
#' @name grid_layer
#' @export
update_grid_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    color_domain = cur_value(),
    color_range = cur_value(),
    get_color_weight = cur_value(),
    color_aggregation = cur_value(),
    elevation_domain = cur_value(),
    elevation_range = cur_value(),
    get_elevation_weight = cur_value(),
    elevation_aggregation = cur_value(),
    elevation_scale = cur_value(),
    cell_size = cur_value(),
    coverage = cur_value(),
    get_position = cur_value(),
    extruded = cur_value(),
    material = cur_value(),
    get_color_value = cur_value(),
    lower_percentile = cur_value(),
    upper_percentile = cur_value(),
    color_scale_type = cur_value(),
    get_elevation_value = cur_value(),
    elevation_lower_percentile = cur_value(),
    elevation_upper_percentile = cur_value(),
    elevation_scale_type = cur_value(),
    gpu_aggregation = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_color_weight <- rlang::enquo(get_color_weight)
  get_elevation_weight <- rlang::enquo(get_elevation_weight)
  get_position <- rlang::enquo(get_position)
  grid_layer <- with_layer_create_errors(
    new_layer(
      type = "GridLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      color_domain = color_domain,
      color_range = color_range,
      get_color_weight = accessor(get_color_weight, data),
      color_aggregation = color_aggregation,
      elevation_domain = elevation_domain,
      elevation_range = elevation_range,
      get_elevation_weight = accessor(get_elevation_weight, data),
      elevation_aggregation = elevation_aggregation,
      elevation_scale = elevation_scale,
      cell_size = cell_size,
      coverage = coverage,
      get_position = accessor(get_position, data),
      extruded = extruded,
      material = material,
      get_color_value = get_color_value,
      lower_percentile = lower_percentile,
      upper_percentile = upper_percentile,
      color_scale_type = color_scale_type,
      get_elevation_value = get_elevation_value,
      elevation_lower_percentile = elevation_lower_percentile,
      elevation_upper_percentile = elevation_upper_percentile,
      elevation_scale_type = elevation_scale_type,
      gpu_aggregation = gpu_aggregation,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(grid_layer)
    validate_name(grid_layer)
    validate_group_name(grid_layer)
    validate_data(grid_layer)
    validate_visible(grid_layer)
    validate_pickable(grid_layer)
    validate_opacity(grid_layer)
    validate_wrap_longitude(grid_layer)
    validate_position_format(grid_layer)
    validate_color_format(grid_layer)
    validate_auto_highlight(grid_layer)
    validate_highlight_color(grid_layer)
    validate_color_domain(grid_layer)
    validate_color_range(grid_layer)
    validate_get_color_weight(grid_layer)
    validate_color_aggregation(grid_layer)
    validate_elevation_domain(grid_layer)
    validate_elevation_range(grid_layer)
    validate_get_elevation_weight(grid_layer)
    validate_elevation_aggregation(grid_layer)
    validate_elevation_scale(grid_layer)
    validate_cell_size(grid_layer)
    validate_coverage(grid_layer)
    validate_get_position(grid_layer)
    validate_extruded(grid_layer)
    validate_material(grid_layer)
    validate_get_color_value(grid_layer)
    validate_lower_percentile(grid_layer)
    validate_upper_percentile(grid_layer)
    validate_color_scale_type(grid_layer)
    validate_get_elevation_value(grid_layer)
    validate_elevation_lower_percentile(grid_layer)
    validate_elevation_upper_percentile(grid_layer)
    validate_elevation_scale_type(grid_layer)
    validate_gpu_aggregation(grid_layer)
    validate_blending_mode(grid_layer)
    validate_visibility_toggle(grid_layer)
  })

  update_layer(rdeck, grid_layer)
}

#' @name gpu_grid_layer
#' @autoglobal
#' @export
add_gpu_grid_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "GPUGridLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    color_domain = NULL,
    color_range = c("#ffffb2", "#fed976", "#feb24c", "#fd8d3c", "#f03b20", "#bd0026"),
    get_color_weight = 1,
    color_aggregation = "SUM",
    elevation_domain = NULL,
    elevation_range = c(0, 1000),
    get_elevation_weight = 1,
    elevation_aggregation = "SUM",
    elevation_scale = 1,
    cell_size = 1000,
    coverage = 1,
    get_position = position,
    extruded = FALSE,
    material = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_color_weight <- rlang::enquo(get_color_weight)
  get_elevation_weight <- rlang::enquo(get_elevation_weight)
  get_position <- rlang::enquo(get_position)

  gpu_grid_layer <- with_layer_create_errors(
    new_layer(
      type = "GPUGridLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      color_domain = color_domain,
      color_range = color_range,
      get_color_weight = accessor(get_color_weight, data),
      color_aggregation = color_aggregation,
      elevation_domain = elevation_domain,
      elevation_range = elevation_range,
      get_elevation_weight = accessor(get_elevation_weight, data),
      elevation_aggregation = elevation_aggregation,
      elevation_scale = elevation_scale,
      cell_size = cell_size,
      coverage = coverage,
      get_position = accessor(get_position, data),
      extruded = extruded,
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(gpu_grid_layer)
    validate_name(gpu_grid_layer)
    validate_group_name(gpu_grid_layer)
    validate_data(gpu_grid_layer)
    validate_visible(gpu_grid_layer)
    validate_pickable(gpu_grid_layer)
    validate_opacity(gpu_grid_layer)
    validate_wrap_longitude(gpu_grid_layer)
    validate_position_format(gpu_grid_layer)
    validate_color_format(gpu_grid_layer)
    validate_auto_highlight(gpu_grid_layer)
    validate_highlight_color(gpu_grid_layer)
    validate_color_domain(gpu_grid_layer)
    validate_color_range(gpu_grid_layer)
    validate_get_color_weight(gpu_grid_layer)
    validate_color_aggregation(gpu_grid_layer)
    validate_elevation_domain(gpu_grid_layer)
    validate_elevation_range(gpu_grid_layer)
    validate_get_elevation_weight(gpu_grid_layer)
    validate_elevation_aggregation(gpu_grid_layer)
    validate_elevation_scale(gpu_grid_layer)
    validate_cell_size(gpu_grid_layer)
    validate_coverage(gpu_grid_layer)
    validate_get_position(gpu_grid_layer)
    validate_extruded(gpu_grid_layer)
    validate_material(gpu_grid_layer)
    validate_blending_mode(gpu_grid_layer)
    validate_visibility_toggle(gpu_grid_layer)
  })

  add_layer(rdeck, gpu_grid_layer)
}
#' @name gpu_grid_layer
#' @export
update_gpu_grid_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    color_domain = cur_value(),
    color_range = cur_value(),
    get_color_weight = cur_value(),
    color_aggregation = cur_value(),
    elevation_domain = cur_value(),
    elevation_range = cur_value(),
    get_elevation_weight = cur_value(),
    elevation_aggregation = cur_value(),
    elevation_scale = cur_value(),
    cell_size = cur_value(),
    coverage = cur_value(),
    get_position = cur_value(),
    extruded = cur_value(),
    material = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_color_weight <- rlang::enquo(get_color_weight)
  get_elevation_weight <- rlang::enquo(get_elevation_weight)
  get_position <- rlang::enquo(get_position)
  gpu_grid_layer <- with_layer_create_errors(
    new_layer(
      type = "GPUGridLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      color_domain = color_domain,
      color_range = color_range,
      get_color_weight = accessor(get_color_weight, data),
      color_aggregation = color_aggregation,
      elevation_domain = elevation_domain,
      elevation_range = elevation_range,
      get_elevation_weight = accessor(get_elevation_weight, data),
      elevation_aggregation = elevation_aggregation,
      elevation_scale = elevation_scale,
      cell_size = cell_size,
      coverage = coverage,
      get_position = accessor(get_position, data),
      extruded = extruded,
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(gpu_grid_layer)
    validate_name(gpu_grid_layer)
    validate_group_name(gpu_grid_layer)
    validate_data(gpu_grid_layer)
    validate_visible(gpu_grid_layer)
    validate_pickable(gpu_grid_layer)
    validate_opacity(gpu_grid_layer)
    validate_wrap_longitude(gpu_grid_layer)
    validate_position_format(gpu_grid_layer)
    validate_color_format(gpu_grid_layer)
    validate_auto_highlight(gpu_grid_layer)
    validate_highlight_color(gpu_grid_layer)
    validate_color_domain(gpu_grid_layer)
    validate_color_range(gpu_grid_layer)
    validate_get_color_weight(gpu_grid_layer)
    validate_color_aggregation(gpu_grid_layer)
    validate_elevation_domain(gpu_grid_layer)
    validate_elevation_range(gpu_grid_layer)
    validate_get_elevation_weight(gpu_grid_layer)
    validate_elevation_aggregation(gpu_grid_layer)
    validate_elevation_scale(gpu_grid_layer)
    validate_cell_size(gpu_grid_layer)
    validate_coverage(gpu_grid_layer)
    validate_get_position(gpu_grid_layer)
    validate_extruded(gpu_grid_layer)
    validate_material(gpu_grid_layer)
    validate_blending_mode(gpu_grid_layer)
    validate_visibility_toggle(gpu_grid_layer)
  })

  update_layer(rdeck, gpu_grid_layer)
}

#' @name heatmap_layer
#' @autoglobal
#' @export
add_heatmap_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "HeatmapLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    get_position = position,
    get_weight = 1,
    intensity = 1,
    radius_pixels = 50,
    color_range = c("#ffffb2", "#fed976", "#feb24c", "#fd8d3c", "#f03b20", "#bd0026"),
    threshold = 0.05,
    color_domain = NULL,
    aggregation = "SUM",
    weights_texture_size = 2048,
    debounce_timeout = 500,
    blending_mode = "normal",
    visibility_toggle = TRUE) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_weight <- rlang::enquo(get_weight)

  heatmap_layer <- with_layer_create_errors(
    new_layer(
      type = "HeatmapLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_position = accessor(get_position, data),
      get_weight = accessor(get_weight, data),
      intensity = intensity,
      radius_pixels = radius_pixels,
      color_range = color_range,
      threshold = threshold,
      color_domain = color_domain,
      aggregation = aggregation,
      weights_texture_size = weights_texture_size,
      debounce_timeout = debounce_timeout,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(heatmap_layer)
    validate_name(heatmap_layer)
    validate_group_name(heatmap_layer)
    validate_data(heatmap_layer)
    validate_visible(heatmap_layer)
    validate_pickable(heatmap_layer)
    validate_opacity(heatmap_layer)
    validate_wrap_longitude(heatmap_layer)
    validate_position_format(heatmap_layer)
    validate_color_format(heatmap_layer)
    validate_auto_highlight(heatmap_layer)
    validate_highlight_color(heatmap_layer)
    validate_get_position(heatmap_layer)
    validate_get_weight(heatmap_layer)
    validate_intensity(heatmap_layer)
    validate_radius_pixels(heatmap_layer)
    validate_color_range(heatmap_layer)
    validate_threshold(heatmap_layer)
    validate_color_domain(heatmap_layer)
    validate_aggregation(heatmap_layer)
    validate_weights_texture_size(heatmap_layer)
    validate_debounce_timeout(heatmap_layer)
    validate_blending_mode(heatmap_layer)
    validate_visibility_toggle(heatmap_layer)
  })

  add_layer(rdeck, heatmap_layer)
}
#' @name heatmap_layer
#' @export
update_heatmap_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    get_position = cur_value(),
    get_weight = cur_value(),
    intensity = cur_value(),
    radius_pixels = cur_value(),
    color_range = cur_value(),
    threshold = cur_value(),
    color_domain = cur_value(),
    aggregation = cur_value(),
    weights_texture_size = cur_value(),
    debounce_timeout = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_weight <- rlang::enquo(get_weight)
  heatmap_layer <- with_layer_create_errors(
    new_layer(
      type = "HeatmapLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_position = accessor(get_position, data),
      get_weight = accessor(get_weight, data),
      intensity = intensity,
      radius_pixels = radius_pixels,
      color_range = color_range,
      threshold = threshold,
      color_domain = color_domain,
      aggregation = aggregation,
      weights_texture_size = weights_texture_size,
      debounce_timeout = debounce_timeout,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle
    )
  )

  with_layer_create_errors({
    validate_id(heatmap_layer)
    validate_name(heatmap_layer)
    validate_group_name(heatmap_layer)
    validate_data(heatmap_layer)
    validate_visible(heatmap_layer)
    validate_pickable(heatmap_layer)
    validate_opacity(heatmap_layer)
    validate_wrap_longitude(heatmap_layer)
    validate_position_format(heatmap_layer)
    validate_color_format(heatmap_layer)
    validate_auto_highlight(heatmap_layer)
    validate_highlight_color(heatmap_layer)
    validate_get_position(heatmap_layer)
    validate_get_weight(heatmap_layer)
    validate_intensity(heatmap_layer)
    validate_radius_pixels(heatmap_layer)
    validate_color_range(heatmap_layer)
    validate_threshold(heatmap_layer)
    validate_color_domain(heatmap_layer)
    validate_aggregation(heatmap_layer)
    validate_weights_texture_size(heatmap_layer)
    validate_debounce_timeout(heatmap_layer)
    validate_blending_mode(heatmap_layer)
    validate_visibility_toggle(heatmap_layer)
  })

  update_layer(rdeck, heatmap_layer)
}

#' @name great_circle_layer
#' @autoglobal
#' @export
add_great_circle_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "GreatCircleLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    get_source_position = source_position,
    get_target_position = target_position,
    get_source_color = "#000000ff",
    get_target_color = "#000000ff",
    get_width = 1,
    get_height = 0,
    get_tilt = 0,
    great_circle = TRUE,
    width_units = "pixels",
    width_scale = 1,
    width_min_pixels = 0,
    width_max_pixels = 9007199254740991,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_source_position <- rlang::enquo(get_source_position)
  get_target_position <- rlang::enquo(get_target_position)
  get_source_color <- rlang::enquo(get_source_color)
  get_target_color <- rlang::enquo(get_target_color)
  get_width <- rlang::enquo(get_width)
  get_height <- rlang::enquo(get_height)
  get_tilt <- rlang::enquo(get_tilt)
  tooltip <- rlang::enquo(tooltip)

  great_circle_layer <- with_layer_create_errors(
    new_layer(
      type = "GreatCircleLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_source_position = accessor(get_source_position, data),
      get_target_position = accessor(get_target_position, data),
      get_source_color = accessor(get_source_color, data),
      get_target_color = accessor(get_target_color, data),
      get_width = accessor(get_width, data),
      get_height = accessor(get_height, data),
      get_tilt = accessor(get_tilt, data),
      great_circle = great_circle,
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(great_circle_layer)
    validate_name(great_circle_layer)
    validate_group_name(great_circle_layer)
    validate_data(great_circle_layer)
    validate_visible(great_circle_layer)
    validate_pickable(great_circle_layer)
    validate_opacity(great_circle_layer)
    validate_wrap_longitude(great_circle_layer)
    validate_position_format(great_circle_layer)
    validate_color_format(great_circle_layer)
    validate_auto_highlight(great_circle_layer)
    validate_highlight_color(great_circle_layer)
    validate_get_source_position(great_circle_layer)
    validate_get_target_position(great_circle_layer)
    validate_get_source_color(great_circle_layer)
    validate_get_target_color(great_circle_layer)
    validate_get_width(great_circle_layer)
    validate_get_height(great_circle_layer)
    validate_get_tilt(great_circle_layer)
    validate_great_circle(great_circle_layer)
    validate_width_units(great_circle_layer)
    validate_width_scale(great_circle_layer)
    validate_width_min_pixels(great_circle_layer)
    validate_width_max_pixels(great_circle_layer)
    validate_blending_mode(great_circle_layer)
    validate_visibility_toggle(great_circle_layer)
    validate_tooltip(great_circle_layer)
  })

  add_layer(rdeck, great_circle_layer)
}
#' @name great_circle_layer
#' @export
update_great_circle_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    get_source_position = cur_value(),
    get_target_position = cur_value(),
    get_source_color = cur_value(),
    get_target_color = cur_value(),
    get_width = cur_value(),
    get_height = cur_value(),
    get_tilt = cur_value(),
    great_circle = cur_value(),
    width_units = cur_value(),
    width_scale = cur_value(),
    width_min_pixels = cur_value(),
    width_max_pixels = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_source_position <- rlang::enquo(get_source_position)
  get_target_position <- rlang::enquo(get_target_position)
  get_source_color <- rlang::enquo(get_source_color)
  get_target_color <- rlang::enquo(get_target_color)
  get_width <- rlang::enquo(get_width)
  get_height <- rlang::enquo(get_height)
  get_tilt <- rlang::enquo(get_tilt)
  tooltip <- rlang::enquo(tooltip)
  great_circle_layer <- with_layer_create_errors(
    new_layer(
      type = "GreatCircleLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_source_position = accessor(get_source_position, data),
      get_target_position = accessor(get_target_position, data),
      get_source_color = accessor(get_source_color, data),
      get_target_color = accessor(get_target_color, data),
      get_width = accessor(get_width, data),
      get_height = accessor(get_height, data),
      get_tilt = accessor(get_tilt, data),
      great_circle = great_circle,
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(great_circle_layer)
    validate_name(great_circle_layer)
    validate_group_name(great_circle_layer)
    validate_data(great_circle_layer)
    validate_visible(great_circle_layer)
    validate_pickable(great_circle_layer)
    validate_opacity(great_circle_layer)
    validate_wrap_longitude(great_circle_layer)
    validate_position_format(great_circle_layer)
    validate_color_format(great_circle_layer)
    validate_auto_highlight(great_circle_layer)
    validate_highlight_color(great_circle_layer)
    validate_get_source_position(great_circle_layer)
    validate_get_target_position(great_circle_layer)
    validate_get_source_color(great_circle_layer)
    validate_get_target_color(great_circle_layer)
    validate_get_width(great_circle_layer)
    validate_get_height(great_circle_layer)
    validate_get_tilt(great_circle_layer)
    validate_great_circle(great_circle_layer)
    validate_width_units(great_circle_layer)
    validate_width_scale(great_circle_layer)
    validate_width_min_pixels(great_circle_layer)
    validate_width_max_pixels(great_circle_layer)
    validate_blending_mode(great_circle_layer)
    validate_visibility_toggle(great_circle_layer)
    validate_tooltip(great_circle_layer)
  })

  update_layer(rdeck, great_circle_layer)
}

#' @name s2_layer
#' @autoglobal
#' @export
add_s2_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "S2Layer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    stroked = TRUE,
    filled = TRUE,
    extruded = FALSE,
    elevation_scale = 1,
    wireframe = FALSE,
    line_width_units = "meters",
    line_width_scale = 1,
    line_width_min_pixels = 0,
    line_width_max_pixels = 9007199254740991,
    line_joint_rounded = FALSE,
    line_miter_limit = 4,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_elevation = 1000,
    material = TRUE,
    get_s2_token = token,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  get_s2_token <- rlang::enquo(get_s2_token)
  tooltip <- rlang::enquo(tooltip)

  s2_layer <- with_layer_create_errors(
    new_layer(
      type = "S2Layer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      get_s2_token = accessor(get_s2_token, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(s2_layer)
    validate_name(s2_layer)
    validate_group_name(s2_layer)
    validate_data(s2_layer)
    validate_visible(s2_layer)
    validate_pickable(s2_layer)
    validate_opacity(s2_layer)
    validate_wrap_longitude(s2_layer)
    validate_position_format(s2_layer)
    validate_color_format(s2_layer)
    validate_auto_highlight(s2_layer)
    validate_highlight_color(s2_layer)
    validate_stroked(s2_layer)
    validate_filled(s2_layer)
    validate_extruded(s2_layer)
    validate_elevation_scale(s2_layer)
    validate_wireframe(s2_layer)
    validate_line_width_units(s2_layer)
    validate_line_width_scale(s2_layer)
    validate_line_width_min_pixels(s2_layer)
    validate_line_width_max_pixels(s2_layer)
    validate_line_joint_rounded(s2_layer)
    validate_line_miter_limit(s2_layer)
    validate_get_fill_color(s2_layer)
    validate_get_line_color(s2_layer)
    validate_get_line_width(s2_layer)
    validate_get_elevation(s2_layer)
    validate_material(s2_layer)
    validate_get_s2_token(s2_layer)
    validate_blending_mode(s2_layer)
    validate_visibility_toggle(s2_layer)
    validate_tooltip(s2_layer)
  })

  add_layer(rdeck, s2_layer)
}
#' @name s2_layer
#' @export
update_s2_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    stroked = cur_value(),
    filled = cur_value(),
    extruded = cur_value(),
    elevation_scale = cur_value(),
    wireframe = cur_value(),
    line_width_units = cur_value(),
    line_width_scale = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_max_pixels = cur_value(),
    line_joint_rounded = cur_value(),
    line_miter_limit = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_elevation = cur_value(),
    material = cur_value(),
    get_s2_token = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  get_s2_token <- rlang::enquo(get_s2_token)
  tooltip <- rlang::enquo(tooltip)
  s2_layer <- with_layer_create_errors(
    new_layer(
      type = "S2Layer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      get_s2_token = accessor(get_s2_token, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(s2_layer)
    validate_name(s2_layer)
    validate_group_name(s2_layer)
    validate_data(s2_layer)
    validate_visible(s2_layer)
    validate_pickable(s2_layer)
    validate_opacity(s2_layer)
    validate_wrap_longitude(s2_layer)
    validate_position_format(s2_layer)
    validate_color_format(s2_layer)
    validate_auto_highlight(s2_layer)
    validate_highlight_color(s2_layer)
    validate_stroked(s2_layer)
    validate_filled(s2_layer)
    validate_extruded(s2_layer)
    validate_elevation_scale(s2_layer)
    validate_wireframe(s2_layer)
    validate_line_width_units(s2_layer)
    validate_line_width_scale(s2_layer)
    validate_line_width_min_pixels(s2_layer)
    validate_line_width_max_pixels(s2_layer)
    validate_line_joint_rounded(s2_layer)
    validate_line_miter_limit(s2_layer)
    validate_get_fill_color(s2_layer)
    validate_get_line_color(s2_layer)
    validate_get_line_width(s2_layer)
    validate_get_elevation(s2_layer)
    validate_material(s2_layer)
    validate_get_s2_token(s2_layer)
    validate_blending_mode(s2_layer)
    validate_visibility_toggle(s2_layer)
    validate_tooltip(s2_layer)
  })

  update_layer(rdeck, s2_layer)
}

#' @name quadkey_layer
#' @autoglobal
#' @export
add_quadkey_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "QuadkeyLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    stroked = TRUE,
    filled = TRUE,
    extruded = FALSE,
    elevation_scale = 1,
    wireframe = FALSE,
    line_width_units = "meters",
    line_width_scale = 1,
    line_width_min_pixels = 0,
    line_width_max_pixels = 9007199254740991,
    line_joint_rounded = FALSE,
    line_miter_limit = 4,
    get_polygon = polygon,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_elevation = 1000,
    material = TRUE,
    get_quadkey = quadkey,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_polygon <- rlang::enquo(get_polygon)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  get_quadkey <- rlang::enquo(get_quadkey)
  tooltip <- rlang::enquo(tooltip)

  quadkey_layer <- with_layer_create_errors(
    new_layer(
      type = "QuadkeyLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_polygon = accessor(get_polygon, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      get_quadkey = accessor(get_quadkey, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(quadkey_layer)
    validate_name(quadkey_layer)
    validate_group_name(quadkey_layer)
    validate_data(quadkey_layer)
    validate_visible(quadkey_layer)
    validate_pickable(quadkey_layer)
    validate_opacity(quadkey_layer)
    validate_wrap_longitude(quadkey_layer)
    validate_position_format(quadkey_layer)
    validate_color_format(quadkey_layer)
    validate_auto_highlight(quadkey_layer)
    validate_highlight_color(quadkey_layer)
    validate_stroked(quadkey_layer)
    validate_filled(quadkey_layer)
    validate_extruded(quadkey_layer)
    validate_elevation_scale(quadkey_layer)
    validate_wireframe(quadkey_layer)
    validate_line_width_units(quadkey_layer)
    validate_line_width_scale(quadkey_layer)
    validate_line_width_min_pixels(quadkey_layer)
    validate_line_width_max_pixels(quadkey_layer)
    validate_line_joint_rounded(quadkey_layer)
    validate_line_miter_limit(quadkey_layer)
    validate_get_polygon(quadkey_layer)
    validate_get_fill_color(quadkey_layer)
    validate_get_line_color(quadkey_layer)
    validate_get_line_width(quadkey_layer)
    validate_get_elevation(quadkey_layer)
    validate_material(quadkey_layer)
    validate_get_quadkey(quadkey_layer)
    validate_blending_mode(quadkey_layer)
    validate_visibility_toggle(quadkey_layer)
    validate_tooltip(quadkey_layer)
  })

  add_layer(rdeck, quadkey_layer)
}
#' @name quadkey_layer
#' @export
update_quadkey_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    stroked = cur_value(),
    filled = cur_value(),
    extruded = cur_value(),
    elevation_scale = cur_value(),
    wireframe = cur_value(),
    line_width_units = cur_value(),
    line_width_scale = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_max_pixels = cur_value(),
    line_joint_rounded = cur_value(),
    line_miter_limit = cur_value(),
    get_polygon = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_elevation = cur_value(),
    material = cur_value(),
    get_quadkey = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_polygon <- rlang::enquo(get_polygon)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  get_quadkey <- rlang::enquo(get_quadkey)
  tooltip <- rlang::enquo(tooltip)
  quadkey_layer <- with_layer_create_errors(
    new_layer(
      type = "QuadkeyLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_polygon = accessor(get_polygon, data),
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      get_quadkey = accessor(get_quadkey, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(quadkey_layer)
    validate_name(quadkey_layer)
    validate_group_name(quadkey_layer)
    validate_data(quadkey_layer)
    validate_visible(quadkey_layer)
    validate_pickable(quadkey_layer)
    validate_opacity(quadkey_layer)
    validate_wrap_longitude(quadkey_layer)
    validate_position_format(quadkey_layer)
    validate_color_format(quadkey_layer)
    validate_auto_highlight(quadkey_layer)
    validate_highlight_color(quadkey_layer)
    validate_stroked(quadkey_layer)
    validate_filled(quadkey_layer)
    validate_extruded(quadkey_layer)
    validate_elevation_scale(quadkey_layer)
    validate_wireframe(quadkey_layer)
    validate_line_width_units(quadkey_layer)
    validate_line_width_scale(quadkey_layer)
    validate_line_width_min_pixels(quadkey_layer)
    validate_line_width_max_pixels(quadkey_layer)
    validate_line_joint_rounded(quadkey_layer)
    validate_line_miter_limit(quadkey_layer)
    validate_get_polygon(quadkey_layer)
    validate_get_fill_color(quadkey_layer)
    validate_get_line_color(quadkey_layer)
    validate_get_line_width(quadkey_layer)
    validate_get_elevation(quadkey_layer)
    validate_material(quadkey_layer)
    validate_get_quadkey(quadkey_layer)
    validate_blending_mode(quadkey_layer)
    validate_visibility_toggle(quadkey_layer)
    validate_tooltip(quadkey_layer)
  })

  update_layer(rdeck, quadkey_layer)
}

#' @name h3_cluster_layer
#' @autoglobal
#' @export
add_h3_cluster_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "H3ClusterLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    stroked = TRUE,
    filled = TRUE,
    extruded = FALSE,
    elevation_scale = 1,
    wireframe = FALSE,
    line_width_units = "meters",
    line_width_scale = 1,
    line_width_min_pixels = 0,
    line_width_max_pixels = 9007199254740991,
    line_joint_rounded = FALSE,
    line_miter_limit = 4,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_elevation = 1000,
    material = TRUE,
    get_hexagons = hexagons,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  get_hexagons <- rlang::enquo(get_hexagons)
  tooltip <- rlang::enquo(tooltip)

  h3_cluster_layer <- with_layer_create_errors(
    new_layer(
      type = "H3ClusterLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      get_hexagons = accessor(get_hexagons, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(h3_cluster_layer)
    validate_name(h3_cluster_layer)
    validate_group_name(h3_cluster_layer)
    validate_data(h3_cluster_layer)
    validate_visible(h3_cluster_layer)
    validate_pickable(h3_cluster_layer)
    validate_opacity(h3_cluster_layer)
    validate_wrap_longitude(h3_cluster_layer)
    validate_position_format(h3_cluster_layer)
    validate_color_format(h3_cluster_layer)
    validate_auto_highlight(h3_cluster_layer)
    validate_highlight_color(h3_cluster_layer)
    validate_stroked(h3_cluster_layer)
    validate_filled(h3_cluster_layer)
    validate_extruded(h3_cluster_layer)
    validate_elevation_scale(h3_cluster_layer)
    validate_wireframe(h3_cluster_layer)
    validate_line_width_units(h3_cluster_layer)
    validate_line_width_scale(h3_cluster_layer)
    validate_line_width_min_pixels(h3_cluster_layer)
    validate_line_width_max_pixels(h3_cluster_layer)
    validate_line_joint_rounded(h3_cluster_layer)
    validate_line_miter_limit(h3_cluster_layer)
    validate_get_fill_color(h3_cluster_layer)
    validate_get_line_color(h3_cluster_layer)
    validate_get_line_width(h3_cluster_layer)
    validate_get_elevation(h3_cluster_layer)
    validate_material(h3_cluster_layer)
    validate_get_hexagons(h3_cluster_layer)
    validate_blending_mode(h3_cluster_layer)
    validate_visibility_toggle(h3_cluster_layer)
    validate_tooltip(h3_cluster_layer)
  })

  add_layer(rdeck, h3_cluster_layer)
}
#' @name h3_cluster_layer
#' @export
update_h3_cluster_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    stroked = cur_value(),
    filled = cur_value(),
    extruded = cur_value(),
    elevation_scale = cur_value(),
    wireframe = cur_value(),
    line_width_units = cur_value(),
    line_width_scale = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_max_pixels = cur_value(),
    line_joint_rounded = cur_value(),
    line_miter_limit = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_elevation = cur_value(),
    material = cur_value(),
    get_hexagons = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  get_hexagons <- rlang::enquo(get_hexagons)
  tooltip <- rlang::enquo(tooltip)
  h3_cluster_layer <- with_layer_create_errors(
    new_layer(
      type = "H3ClusterLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      get_hexagons = accessor(get_hexagons, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(h3_cluster_layer)
    validate_name(h3_cluster_layer)
    validate_group_name(h3_cluster_layer)
    validate_data(h3_cluster_layer)
    validate_visible(h3_cluster_layer)
    validate_pickable(h3_cluster_layer)
    validate_opacity(h3_cluster_layer)
    validate_wrap_longitude(h3_cluster_layer)
    validate_position_format(h3_cluster_layer)
    validate_color_format(h3_cluster_layer)
    validate_auto_highlight(h3_cluster_layer)
    validate_highlight_color(h3_cluster_layer)
    validate_stroked(h3_cluster_layer)
    validate_filled(h3_cluster_layer)
    validate_extruded(h3_cluster_layer)
    validate_elevation_scale(h3_cluster_layer)
    validate_wireframe(h3_cluster_layer)
    validate_line_width_units(h3_cluster_layer)
    validate_line_width_scale(h3_cluster_layer)
    validate_line_width_min_pixels(h3_cluster_layer)
    validate_line_width_max_pixels(h3_cluster_layer)
    validate_line_joint_rounded(h3_cluster_layer)
    validate_line_miter_limit(h3_cluster_layer)
    validate_get_fill_color(h3_cluster_layer)
    validate_get_line_color(h3_cluster_layer)
    validate_get_line_width(h3_cluster_layer)
    validate_get_elevation(h3_cluster_layer)
    validate_material(h3_cluster_layer)
    validate_get_hexagons(h3_cluster_layer)
    validate_blending_mode(h3_cluster_layer)
    validate_visibility_toggle(h3_cluster_layer)
    validate_tooltip(h3_cluster_layer)
  })

  update_layer(rdeck, h3_cluster_layer)
}

#' @name h3_hexagon_layer
#' @autoglobal
#' @export
add_h3_hexagon_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "H3HexagonLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    stroked = TRUE,
    filled = TRUE,
    extruded = FALSE,
    elevation_scale = 1,
    wireframe = FALSE,
    line_width_units = "meters",
    line_width_scale = 1,
    line_width_min_pixels = 0,
    line_width_max_pixels = 9007199254740991,
    line_joint_rounded = FALSE,
    line_miter_limit = 4,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_elevation = 1000,
    material = TRUE,
    high_precision = "auto",
    coverage = 1,
    center_hexagon = NULL,
    get_hexagon = hexagon,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  get_hexagon <- rlang::enquo(get_hexagon)
  tooltip <- rlang::enquo(tooltip)

  h3_hexagon_layer <- with_layer_create_errors(
    new_layer(
      type = "H3HexagonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      high_precision = high_precision,
      coverage = coverage,
      center_hexagon = center_hexagon,
      get_hexagon = accessor(get_hexagon, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(h3_hexagon_layer)
    validate_name(h3_hexagon_layer)
    validate_group_name(h3_hexagon_layer)
    validate_data(h3_hexagon_layer)
    validate_visible(h3_hexagon_layer)
    validate_pickable(h3_hexagon_layer)
    validate_opacity(h3_hexagon_layer)
    validate_wrap_longitude(h3_hexagon_layer)
    validate_position_format(h3_hexagon_layer)
    validate_color_format(h3_hexagon_layer)
    validate_auto_highlight(h3_hexagon_layer)
    validate_highlight_color(h3_hexagon_layer)
    validate_stroked(h3_hexagon_layer)
    validate_filled(h3_hexagon_layer)
    validate_extruded(h3_hexagon_layer)
    validate_elevation_scale(h3_hexagon_layer)
    validate_wireframe(h3_hexagon_layer)
    validate_line_width_units(h3_hexagon_layer)
    validate_line_width_scale(h3_hexagon_layer)
    validate_line_width_min_pixels(h3_hexagon_layer)
    validate_line_width_max_pixels(h3_hexagon_layer)
    validate_line_joint_rounded(h3_hexagon_layer)
    validate_line_miter_limit(h3_hexagon_layer)
    validate_get_fill_color(h3_hexagon_layer)
    validate_get_line_color(h3_hexagon_layer)
    validate_get_line_width(h3_hexagon_layer)
    validate_get_elevation(h3_hexagon_layer)
    validate_material(h3_hexagon_layer)
    validate_high_precision(h3_hexagon_layer)
    validate_coverage(h3_hexagon_layer)
    validate_center_hexagon(h3_hexagon_layer)
    validate_get_hexagon(h3_hexagon_layer)
    validate_blending_mode(h3_hexagon_layer)
    validate_visibility_toggle(h3_hexagon_layer)
    validate_tooltip(h3_hexagon_layer)
  })

  add_layer(rdeck, h3_hexagon_layer)
}
#' @name h3_hexagon_layer
#' @export
update_h3_hexagon_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    stroked = cur_value(),
    filled = cur_value(),
    extruded = cur_value(),
    elevation_scale = cur_value(),
    wireframe = cur_value(),
    line_width_units = cur_value(),
    line_width_scale = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_max_pixels = cur_value(),
    line_joint_rounded = cur_value(),
    line_miter_limit = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_elevation = cur_value(),
    material = cur_value(),
    high_precision = cur_value(),
    coverage = cur_value(),
    center_hexagon = cur_value(),
    get_hexagon = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_elevation <- rlang::enquo(get_elevation)
  get_hexagon <- rlang::enquo(get_hexagon)
  tooltip <- rlang::enquo(tooltip)
  h3_hexagon_layer <- with_layer_create_errors(
    new_layer(
      type = "H3HexagonLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      stroked = stroked,
      filled = filled,
      extruded = extruded,
      elevation_scale = elevation_scale,
      wireframe = wireframe,
      line_width_units = line_width_units,
      line_width_scale = line_width_scale,
      line_width_min_pixels = line_width_min_pixels,
      line_width_max_pixels = line_width_max_pixels,
      line_joint_rounded = line_joint_rounded,
      line_miter_limit = line_miter_limit,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_elevation = accessor(get_elevation, data),
      material = material,
      high_precision = high_precision,
      coverage = coverage,
      center_hexagon = center_hexagon,
      get_hexagon = accessor(get_hexagon, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(h3_hexagon_layer)
    validate_name(h3_hexagon_layer)
    validate_group_name(h3_hexagon_layer)
    validate_data(h3_hexagon_layer)
    validate_visible(h3_hexagon_layer)
    validate_pickable(h3_hexagon_layer)
    validate_opacity(h3_hexagon_layer)
    validate_wrap_longitude(h3_hexagon_layer)
    validate_position_format(h3_hexagon_layer)
    validate_color_format(h3_hexagon_layer)
    validate_auto_highlight(h3_hexagon_layer)
    validate_highlight_color(h3_hexagon_layer)
    validate_stroked(h3_hexagon_layer)
    validate_filled(h3_hexagon_layer)
    validate_extruded(h3_hexagon_layer)
    validate_elevation_scale(h3_hexagon_layer)
    validate_wireframe(h3_hexagon_layer)
    validate_line_width_units(h3_hexagon_layer)
    validate_line_width_scale(h3_hexagon_layer)
    validate_line_width_min_pixels(h3_hexagon_layer)
    validate_line_width_max_pixels(h3_hexagon_layer)
    validate_line_joint_rounded(h3_hexagon_layer)
    validate_line_miter_limit(h3_hexagon_layer)
    validate_get_fill_color(h3_hexagon_layer)
    validate_get_line_color(h3_hexagon_layer)
    validate_get_line_width(h3_hexagon_layer)
    validate_get_elevation(h3_hexagon_layer)
    validate_material(h3_hexagon_layer)
    validate_high_precision(h3_hexagon_layer)
    validate_coverage(h3_hexagon_layer)
    validate_center_hexagon(h3_hexagon_layer)
    validate_get_hexagon(h3_hexagon_layer)
    validate_blending_mode(h3_hexagon_layer)
    validate_visibility_toggle(h3_hexagon_layer)
    validate_tooltip(h3_hexagon_layer)
  })

  update_layer(rdeck, h3_hexagon_layer)
}

#' @name tile_layer
#' @autoglobal
#' @export
add_tile_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "TileLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    get_tile_data = NULL,
    extent = NULL,
    tile_size = 512,
    max_zoom = NULL,
    min_zoom = 0,
    max_cache_size = NULL,
    max_cache_byte_size = NULL,
    refinement_strategy = "best-available",
    z_range = NULL,
    max_requests = 6,
    zoom_offset = 0,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL,
    desaturate = 0,
    transparent_color = "#00000000",
    tint_color = "#ffffff") {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  tooltip <- rlang::enquo(tooltip)

  tile_layer <- with_layer_create_errors(
    new_layer(
      type = "TileLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_tile_data = get_tile_data,
      extent = extent,
      tile_size = tile_size,
      max_zoom = max_zoom,
      min_zoom = min_zoom,
      max_cache_size = max_cache_size,
      max_cache_byte_size = max_cache_byte_size,
      refinement_strategy = refinement_strategy,
      z_range = z_range,
      max_requests = max_requests,
      zoom_offset = zoom_offset,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data),
      desaturate = desaturate,
      transparent_color = transparent_color,
      tint_color = tint_color
    )
  )

  with_layer_create_errors({
    validate_id(tile_layer)
    validate_name(tile_layer)
    validate_group_name(tile_layer)
    validate_data(tile_layer)
    validate_visible(tile_layer)
    validate_pickable(tile_layer)
    validate_opacity(tile_layer)
    validate_wrap_longitude(tile_layer)
    validate_position_format(tile_layer)
    validate_color_format(tile_layer)
    validate_auto_highlight(tile_layer)
    validate_highlight_color(tile_layer)
    validate_get_tile_data(tile_layer)
    validate_extent(tile_layer)
    validate_tile_size(tile_layer)
    validate_max_zoom(tile_layer)
    validate_min_zoom(tile_layer)
    validate_max_cache_size(tile_layer)
    validate_max_cache_byte_size(tile_layer)
    validate_refinement_strategy(tile_layer)
    validate_z_range(tile_layer)
    validate_max_requests(tile_layer)
    validate_zoom_offset(tile_layer)
    validate_blending_mode(tile_layer)
    validate_visibility_toggle(tile_layer)
    validate_tooltip(tile_layer)
    validate_desaturate(tile_layer)
    validate_transparent_color(tile_layer)
    validate_tint_color(tile_layer)
  })

  add_layer(rdeck, tile_layer)
}
#' @name tile_layer
#' @export
update_tile_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    get_tile_data = cur_value(),
    extent = cur_value(),
    tile_size = cur_value(),
    max_zoom = cur_value(),
    min_zoom = cur_value(),
    max_cache_size = cur_value(),
    max_cache_byte_size = cur_value(),
    refinement_strategy = cur_value(),
    z_range = cur_value(),
    max_requests = cur_value(),
    zoom_offset = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value(),
    desaturate = cur_value(),
    transparent_color = cur_value(),
    tint_color = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  tooltip <- rlang::enquo(tooltip)
  tile_layer <- with_layer_create_errors(
    new_layer(
      type = "TileLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_tile_data = get_tile_data,
      extent = extent,
      tile_size = tile_size,
      max_zoom = max_zoom,
      min_zoom = min_zoom,
      max_cache_size = max_cache_size,
      max_cache_byte_size = max_cache_byte_size,
      refinement_strategy = refinement_strategy,
      z_range = z_range,
      max_requests = max_requests,
      zoom_offset = zoom_offset,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data),
      desaturate = desaturate,
      transparent_color = transparent_color,
      tint_color = tint_color
    )
  )

  with_layer_create_errors({
    validate_id(tile_layer)
    validate_name(tile_layer)
    validate_group_name(tile_layer)
    validate_data(tile_layer)
    validate_visible(tile_layer)
    validate_pickable(tile_layer)
    validate_opacity(tile_layer)
    validate_wrap_longitude(tile_layer)
    validate_position_format(tile_layer)
    validate_color_format(tile_layer)
    validate_auto_highlight(tile_layer)
    validate_highlight_color(tile_layer)
    validate_get_tile_data(tile_layer)
    validate_extent(tile_layer)
    validate_tile_size(tile_layer)
    validate_max_zoom(tile_layer)
    validate_min_zoom(tile_layer)
    validate_max_cache_size(tile_layer)
    validate_max_cache_byte_size(tile_layer)
    validate_refinement_strategy(tile_layer)
    validate_z_range(tile_layer)
    validate_max_requests(tile_layer)
    validate_zoom_offset(tile_layer)
    validate_blending_mode(tile_layer)
    validate_visibility_toggle(tile_layer)
    validate_tooltip(tile_layer)
    validate_desaturate(tile_layer)
    validate_transparent_color(tile_layer)
    validate_tint_color(tile_layer)
  })

  update_layer(rdeck, tile_layer)
}

#' @name trips_layer
#' @autoglobal
#' @export
add_trips_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "TripsLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    width_units = "meters",
    width_scale = 1,
    width_min_pixels = 0,
    width_max_pixels = 9007199254740991,
    joint_rounded = FALSE,
    cap_rounded = FALSE,
    miter_limit = 4,
    billboard = FALSE,
    get_path = path,
    get_color = "#000000ff",
    get_width = 1,
    fade_trail = TRUE,
    trail_length = 120,
    get_timestamps = timestamps,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL,
    loop_length = 1800,
    animation_speed = 30) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_path <- rlang::enquo(get_path)
  get_color <- rlang::enquo(get_color)
  get_width <- rlang::enquo(get_width)
  get_timestamps <- rlang::enquo(get_timestamps)
  tooltip <- rlang::enquo(tooltip)

  trips_layer <- with_layer_create_errors(
    new_layer(
      type = "TripsLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      joint_rounded = joint_rounded,
      cap_rounded = cap_rounded,
      miter_limit = miter_limit,
      billboard = billboard,
      get_path = accessor(get_path, data),
      get_color = accessor(get_color, data),
      get_width = accessor(get_width, data),
      fade_trail = fade_trail,
      trail_length = trail_length,
      get_timestamps = accessor(get_timestamps, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data),
      loop_length = loop_length,
      animation_speed = animation_speed
    )
  )

  with_layer_create_errors({
    validate_id(trips_layer)
    validate_name(trips_layer)
    validate_group_name(trips_layer)
    validate_data(trips_layer)
    validate_visible(trips_layer)
    validate_pickable(trips_layer)
    validate_opacity(trips_layer)
    validate_wrap_longitude(trips_layer)
    validate_position_format(trips_layer)
    validate_color_format(trips_layer)
    validate_auto_highlight(trips_layer)
    validate_highlight_color(trips_layer)
    validate_width_units(trips_layer)
    validate_width_scale(trips_layer)
    validate_width_min_pixels(trips_layer)
    validate_width_max_pixels(trips_layer)
    validate_joint_rounded(trips_layer)
    validate_cap_rounded(trips_layer)
    validate_miter_limit(trips_layer)
    validate_billboard(trips_layer)
    validate_get_path(trips_layer)
    validate_get_color(trips_layer)
    validate_get_width(trips_layer)
    validate_fade_trail(trips_layer)
    validate_trail_length(trips_layer)
    validate_get_timestamps(trips_layer)
    validate_blending_mode(trips_layer)
    validate_visibility_toggle(trips_layer)
    validate_tooltip(trips_layer)
    validate_loop_length(trips_layer)
    validate_animation_speed(trips_layer)
  })

  add_layer(rdeck, trips_layer)
}
#' @name trips_layer
#' @export
update_trips_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    width_units = cur_value(),
    width_scale = cur_value(),
    width_min_pixels = cur_value(),
    width_max_pixels = cur_value(),
    joint_rounded = cur_value(),
    cap_rounded = cur_value(),
    miter_limit = cur_value(),
    billboard = cur_value(),
    get_path = cur_value(),
    get_color = cur_value(),
    get_width = cur_value(),
    fade_trail = cur_value(),
    trail_length = cur_value(),
    get_timestamps = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value(),
    loop_length = cur_value(),
    animation_speed = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_path <- rlang::enquo(get_path)
  get_color <- rlang::enquo(get_color)
  get_width <- rlang::enquo(get_width)
  get_timestamps <- rlang::enquo(get_timestamps)
  tooltip <- rlang::enquo(tooltip)
  trips_layer <- with_layer_create_errors(
    new_layer(
      type = "TripsLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      width_units = width_units,
      width_scale = width_scale,
      width_min_pixels = width_min_pixels,
      width_max_pixels = width_max_pixels,
      joint_rounded = joint_rounded,
      cap_rounded = cap_rounded,
      miter_limit = miter_limit,
      billboard = billboard,
      get_path = accessor(get_path, data),
      get_color = accessor(get_color, data),
      get_width = accessor(get_width, data),
      fade_trail = fade_trail,
      trail_length = trail_length,
      get_timestamps = accessor(get_timestamps, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data),
      loop_length = loop_length,
      animation_speed = animation_speed
    )
  )

  with_layer_create_errors({
    validate_id(trips_layer)
    validate_name(trips_layer)
    validate_group_name(trips_layer)
    validate_data(trips_layer)
    validate_visible(trips_layer)
    validate_pickable(trips_layer)
    validate_opacity(trips_layer)
    validate_wrap_longitude(trips_layer)
    validate_position_format(trips_layer)
    validate_color_format(trips_layer)
    validate_auto_highlight(trips_layer)
    validate_highlight_color(trips_layer)
    validate_width_units(trips_layer)
    validate_width_scale(trips_layer)
    validate_width_min_pixels(trips_layer)
    validate_width_max_pixels(trips_layer)
    validate_joint_rounded(trips_layer)
    validate_cap_rounded(trips_layer)
    validate_miter_limit(trips_layer)
    validate_billboard(trips_layer)
    validate_get_path(trips_layer)
    validate_get_color(trips_layer)
    validate_get_width(trips_layer)
    validate_fade_trail(trips_layer)
    validate_trail_length(trips_layer)
    validate_get_timestamps(trips_layer)
    validate_blending_mode(trips_layer)
    validate_visibility_toggle(trips_layer)
    validate_tooltip(trips_layer)
    validate_loop_length(trips_layer)
    validate_animation_speed(trips_layer)
  })

  update_layer(rdeck, trips_layer)
}

#' @name tile_3d_layer
#' @autoglobal
#' @export
add_tile_3d_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "Tile3DLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    get_point_color = "#000000ff",
    point_size = 1,
    loader = list(
      id = "3d-tiles",
      name = "3D Tiles",
      module = "3d-tiles",
      version = "3.2.13",
      extensions = c("cmpt", "pnts", "b3dm", "i3dm"),
      mimeTypes = c("application/octet-stream"),
      tests = c("cmpt", "pnts", "b3dm", "i3dm"),
      parse = NULL,
      options = list("3d-tiles" = list(
        loadGLTF = TRUE,
        decodeQuantizedPositions = FALSE,
        isTileset = "auto",
        assetGltfUpAxis = NULL
      ))
    ),
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_point_color <- rlang::enquo(get_point_color)
  tooltip <- rlang::enquo(tooltip)

  tile_3d_layer <- with_layer_create_errors(
    new_layer(
      type = "Tile3DLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_point_color = accessor(get_point_color, data),
      point_size = point_size,
      loader = loader,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(tile_3d_layer)
    validate_name(tile_3d_layer)
    validate_group_name(tile_3d_layer)
    validate_data(tile_3d_layer)
    validate_visible(tile_3d_layer)
    validate_pickable(tile_3d_layer)
    validate_opacity(tile_3d_layer)
    validate_wrap_longitude(tile_3d_layer)
    validate_position_format(tile_3d_layer)
    validate_color_format(tile_3d_layer)
    validate_auto_highlight(tile_3d_layer)
    validate_highlight_color(tile_3d_layer)
    validate_get_point_color(tile_3d_layer)
    validate_point_size(tile_3d_layer)
    validate_loader(tile_3d_layer)
    validate_blending_mode(tile_3d_layer)
    validate_visibility_toggle(tile_3d_layer)
    validate_tooltip(tile_3d_layer)
  })

  add_layer(rdeck, tile_3d_layer)
}
#' @name tile_3d_layer
#' @export
update_tile_3d_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    get_point_color = cur_value(),
    point_size = cur_value(),
    loader = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_point_color <- rlang::enquo(get_point_color)
  tooltip <- rlang::enquo(tooltip)
  tile_3d_layer <- with_layer_create_errors(
    new_layer(
      type = "Tile3DLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_point_color = accessor(get_point_color, data),
      point_size = point_size,
      loader = loader,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(tile_3d_layer)
    validate_name(tile_3d_layer)
    validate_group_name(tile_3d_layer)
    validate_data(tile_3d_layer)
    validate_visible(tile_3d_layer)
    validate_pickable(tile_3d_layer)
    validate_opacity(tile_3d_layer)
    validate_wrap_longitude(tile_3d_layer)
    validate_position_format(tile_3d_layer)
    validate_color_format(tile_3d_layer)
    validate_auto_highlight(tile_3d_layer)
    validate_highlight_color(tile_3d_layer)
    validate_get_point_color(tile_3d_layer)
    validate_point_size(tile_3d_layer)
    validate_loader(tile_3d_layer)
    validate_blending_mode(tile_3d_layer)
    validate_visibility_toggle(tile_3d_layer)
    validate_tooltip(tile_3d_layer)
  })

  update_layer(rdeck, tile_3d_layer)
}

#' @name terrain_layer
#' @autoglobal
#' @export
add_terrain_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "TerrainLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    get_tile_data = NULL,
    extent = NULL,
    tile_size = 512,
    max_zoom = NULL,
    min_zoom = 0,
    max_cache_size = NULL,
    max_cache_byte_size = NULL,
    refinement_strategy = "best-available",
    z_range = NULL,
    max_requests = 6,
    zoom_offset = 0,
    elevation_data = NULL,
    texture = NULL,
    mesh_max_error = 4,
    bounds = NULL,
    color = "#ffffff",
    elevation_decoder = list(
      rScaler = 1,
      gScaler = 0,
      bScaler = 0,
      offset = 0
    ),
    worker_url = NULL,
    wireframe = FALSE,
    material = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  tooltip <- rlang::enquo(tooltip)

  terrain_layer <- with_layer_create_errors(
    new_layer(
      type = "TerrainLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_tile_data = get_tile_data,
      extent = extent,
      tile_size = tile_size,
      max_zoom = max_zoom,
      min_zoom = min_zoom,
      max_cache_size = max_cache_size,
      max_cache_byte_size = max_cache_byte_size,
      refinement_strategy = refinement_strategy,
      z_range = z_range,
      max_requests = max_requests,
      zoom_offset = zoom_offset,
      elevation_data = elevation_data,
      texture = texture,
      mesh_max_error = mesh_max_error,
      bounds = if (!is.null(bounds)) wk::wk_bbox(bounds),
      color = color,
      elevation_decoder = elevation_decoder,
      worker_url = worker_url,
      wireframe = wireframe,
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(terrain_layer)
    validate_name(terrain_layer)
    validate_group_name(terrain_layer)
    validate_data(terrain_layer)
    validate_visible(terrain_layer)
    validate_pickable(terrain_layer)
    validate_opacity(terrain_layer)
    validate_wrap_longitude(terrain_layer)
    validate_position_format(terrain_layer)
    validate_color_format(terrain_layer)
    validate_auto_highlight(terrain_layer)
    validate_highlight_color(terrain_layer)
    validate_get_tile_data(terrain_layer)
    validate_extent(terrain_layer)
    validate_tile_size(terrain_layer)
    validate_max_zoom(terrain_layer)
    validate_min_zoom(terrain_layer)
    validate_max_cache_size(terrain_layer)
    validate_max_cache_byte_size(terrain_layer)
    validate_refinement_strategy(terrain_layer)
    validate_z_range(terrain_layer)
    validate_max_requests(terrain_layer)
    validate_zoom_offset(terrain_layer)
    validate_elevation_data(terrain_layer)
    validate_texture(terrain_layer)
    validate_mesh_max_error(terrain_layer)
    validate_bounds(terrain_layer)
    validate_color(terrain_layer)
    validate_elevation_decoder(terrain_layer)
    validate_worker_url(terrain_layer)
    validate_wireframe(terrain_layer)
    validate_material(terrain_layer)
    validate_blending_mode(terrain_layer)
    validate_visibility_toggle(terrain_layer)
    validate_tooltip(terrain_layer)
  })

  add_layer(rdeck, terrain_layer)
}
#' @name terrain_layer
#' @export
update_terrain_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    get_tile_data = cur_value(),
    extent = cur_value(),
    tile_size = cur_value(),
    max_zoom = cur_value(),
    min_zoom = cur_value(),
    max_cache_size = cur_value(),
    max_cache_byte_size = cur_value(),
    refinement_strategy = cur_value(),
    z_range = cur_value(),
    max_requests = cur_value(),
    zoom_offset = cur_value(),
    elevation_data = cur_value(),
    texture = cur_value(),
    mesh_max_error = cur_value(),
    bounds = cur_value(),
    color = cur_value(),
    elevation_decoder = cur_value(),
    worker_url = cur_value(),
    wireframe = cur_value(),
    material = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  tooltip <- rlang::enquo(tooltip)
  terrain_layer <- with_layer_create_errors(
    new_layer(
      type = "TerrainLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_tile_data = get_tile_data,
      extent = extent,
      tile_size = tile_size,
      max_zoom = max_zoom,
      min_zoom = min_zoom,
      max_cache_size = max_cache_size,
      max_cache_byte_size = max_cache_byte_size,
      refinement_strategy = refinement_strategy,
      z_range = z_range,
      max_requests = max_requests,
      zoom_offset = zoom_offset,
      elevation_data = elevation_data,
      texture = texture,
      mesh_max_error = mesh_max_error,
      bounds = if (!is.null(bounds)) wk::wk_bbox(bounds),
      color = color,
      elevation_decoder = elevation_decoder,
      worker_url = worker_url,
      wireframe = wireframe,
      material = material,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(terrain_layer)
    validate_name(terrain_layer)
    validate_group_name(terrain_layer)
    validate_data(terrain_layer)
    validate_visible(terrain_layer)
    validate_pickable(terrain_layer)
    validate_opacity(terrain_layer)
    validate_wrap_longitude(terrain_layer)
    validate_position_format(terrain_layer)
    validate_color_format(terrain_layer)
    validate_auto_highlight(terrain_layer)
    validate_highlight_color(terrain_layer)
    validate_get_tile_data(terrain_layer)
    validate_extent(terrain_layer)
    validate_tile_size(terrain_layer)
    validate_max_zoom(terrain_layer)
    validate_min_zoom(terrain_layer)
    validate_max_cache_size(terrain_layer)
    validate_max_cache_byte_size(terrain_layer)
    validate_refinement_strategy(terrain_layer)
    validate_z_range(terrain_layer)
    validate_max_requests(terrain_layer)
    validate_zoom_offset(terrain_layer)
    validate_elevation_data(terrain_layer)
    validate_texture(terrain_layer)
    validate_mesh_max_error(terrain_layer)
    validate_bounds(terrain_layer)
    validate_color(terrain_layer)
    validate_elevation_decoder(terrain_layer)
    validate_worker_url(terrain_layer)
    validate_wireframe(terrain_layer)
    validate_material(terrain_layer)
    validate_blending_mode(terrain_layer)
    validate_visibility_toggle(terrain_layer)
    validate_tooltip(terrain_layer)
  })

  update_layer(rdeck, terrain_layer)
}

#' @name mvt_layer
#' @autoglobal
#' @export
add_mvt_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "MVTLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    get_tile_data = NULL,
    extent = NULL,
    tile_size = 512,
    max_zoom = NULL,
    min_zoom = 0,
    max_cache_size = NULL,
    max_cache_byte_size = NULL,
    refinement_strategy = "best-available",
    z_range = NULL,
    max_requests = 6,
    zoom_offset = 0,
    filled = TRUE,
    stroked = TRUE,
    line_width_max_pixels = 9007199254740991,
    line_width_min_pixels = 0,
    line_width_scale = 1,
    line_width_units = "meters",
    point_radius_max_pixels = 9007199254740991,
    point_radius_min_pixels = 0,
    point_radius_scale = 1,
    point_radius_units = "meters",
    point_antialiasing = TRUE,
    point_billboard = FALSE,
    get_fill_color = "#000000ff",
    get_line_color = "#000000ff",
    get_line_width = 1,
    get_point_radius = 1,
    icon_atlas = NULL,
    icon_mapping = list(),
    icon_size_max_pixels = 9007199254740991,
    icon_size_min_pixels = 0,
    icon_size_scale = 1,
    icon_size_units = "pixels",
    icon_alpha_cutoff = 0.05,
    icon_billboard = TRUE,
    get_icon = icon,
    get_icon_angle = 0,
    get_icon_color = "#000000ff",
    get_icon_pixel_offset = c(0, 0),
    get_icon_size = 1,
    text_size_max_pixels = 9007199254740991,
    text_size_min_pixels = 0,
    text_size_scale = 1,
    text_size_units = "pixels",
    text_background = FALSE,
    text_background_padding = c(0, 0, 0, 0),
    text_font_family = "Roboto, Helvetica, Arial, san-serif",
    text_font_weight = "normal",
    text_line_height = 1,
    text_max_width = -1,
    text_outline_color = "#000000ff",
    text_outline_width = 0,
    text_word_break = "break-word",
    text_billboard = TRUE,
    text_font_settings = list(),
    get_text = text,
    get_text_angle = 0,
    get_text_color = "#000000ff",
    get_text_pixel_offset = c(0, 0),
    get_text_size = 32,
    get_text_anchor = "middle",
    get_text_alignment_baseline = "center",
    get_text_background_color = "#ffffffff",
    get_text_border_color = "#000000ff",
    get_text_border_width = 0,
    line_joint_rounded = FALSE,
    line_cap_rounded = FALSE,
    line_miter_limit = 4,
    line_billboard = FALSE,
    extruded = FALSE,
    wireframe = FALSE,
    elevation_scale = 1,
    material = TRUE,
    get_elevation = 1000,
    point_type = "circle",
    unique_id_property = "",
    highlighted_feature_id = NULL,
    binary = TRUE,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_point_radius <- rlang::enquo(get_point_radius)
  get_icon <- rlang::enquo(get_icon)
  get_icon_angle <- rlang::enquo(get_icon_angle)
  get_icon_color <- rlang::enquo(get_icon_color)
  get_icon_pixel_offset <- rlang::enquo(get_icon_pixel_offset)
  get_icon_size <- rlang::enquo(get_icon_size)
  get_text <- rlang::enquo(get_text)
  get_text_angle <- rlang::enquo(get_text_angle)
  get_text_color <- rlang::enquo(get_text_color)
  get_text_pixel_offset <- rlang::enquo(get_text_pixel_offset)
  get_text_size <- rlang::enquo(get_text_size)
  get_text_anchor <- rlang::enquo(get_text_anchor)
  get_text_alignment_baseline <- rlang::enquo(get_text_alignment_baseline)
  get_text_background_color <- rlang::enquo(get_text_background_color)
  get_text_border_color <- rlang::enquo(get_text_border_color)
  get_text_border_width <- rlang::enquo(get_text_border_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)

  mvt_layer <- with_layer_create_errors(
    new_layer(
      type = "MVTLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_tile_data = get_tile_data,
      extent = extent,
      tile_size = tile_size,
      max_zoom = max_zoom,
      min_zoom = min_zoom,
      max_cache_size = max_cache_size,
      max_cache_byte_size = max_cache_byte_size,
      refinement_strategy = refinement_strategy,
      z_range = z_range,
      max_requests = max_requests,
      zoom_offset = zoom_offset,
      filled = filled,
      stroked = stroked,
      line_width_max_pixels = line_width_max_pixels,
      line_width_min_pixels = line_width_min_pixels,
      line_width_scale = line_width_scale,
      line_width_units = line_width_units,
      point_radius_max_pixels = point_radius_max_pixels,
      point_radius_min_pixels = point_radius_min_pixels,
      point_radius_scale = point_radius_scale,
      point_radius_units = point_radius_units,
      point_antialiasing = point_antialiasing,
      point_billboard = point_billboard,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_point_radius = accessor(get_point_radius, data),
      icon_atlas = icon_atlas,
      icon_mapping = icon_mapping,
      icon_size_max_pixels = icon_size_max_pixels,
      icon_size_min_pixels = icon_size_min_pixels,
      icon_size_scale = icon_size_scale,
      icon_size_units = icon_size_units,
      icon_alpha_cutoff = icon_alpha_cutoff,
      icon_billboard = icon_billboard,
      get_icon = accessor(get_icon, data),
      get_icon_angle = accessor(get_icon_angle, data),
      get_icon_color = accessor(get_icon_color, data),
      get_icon_pixel_offset = accessor(get_icon_pixel_offset, data),
      get_icon_size = accessor(get_icon_size, data),
      text_size_max_pixels = text_size_max_pixels,
      text_size_min_pixels = text_size_min_pixels,
      text_size_scale = text_size_scale,
      text_size_units = text_size_units,
      text_background = text_background,
      text_background_padding = text_background_padding,
      text_font_family = text_font_family,
      text_font_weight = text_font_weight,
      text_line_height = text_line_height,
      text_max_width = text_max_width,
      text_outline_color = text_outline_color,
      text_outline_width = text_outline_width,
      text_word_break = text_word_break,
      text_billboard = text_billboard,
      text_font_settings = text_font_settings,
      get_text = accessor(get_text, data),
      get_text_angle = accessor(get_text_angle, data),
      get_text_color = accessor(get_text_color, data),
      get_text_pixel_offset = accessor(get_text_pixel_offset, data),
      get_text_size = accessor(get_text_size, data),
      get_text_anchor = accessor(get_text_anchor, data),
      get_text_alignment_baseline = accessor(get_text_alignment_baseline, data),
      get_text_background_color = accessor(get_text_background_color, data),
      get_text_border_color = accessor(get_text_border_color, data),
      get_text_border_width = accessor(get_text_border_width, data),
      line_joint_rounded = line_joint_rounded,
      line_cap_rounded = line_cap_rounded,
      line_miter_limit = line_miter_limit,
      line_billboard = line_billboard,
      extruded = extruded,
      wireframe = wireframe,
      elevation_scale = elevation_scale,
      material = material,
      get_elevation = accessor(get_elevation, data),
      point_type = point_type,
      unique_id_property = unique_id_property,
      highlighted_feature_id = highlighted_feature_id,
      binary = binary,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(mvt_layer)
    validate_name(mvt_layer)
    validate_group_name(mvt_layer)
    validate_data(mvt_layer)
    validate_visible(mvt_layer)
    validate_pickable(mvt_layer)
    validate_opacity(mvt_layer)
    validate_wrap_longitude(mvt_layer)
    validate_position_format(mvt_layer)
    validate_color_format(mvt_layer)
    validate_auto_highlight(mvt_layer)
    validate_highlight_color(mvt_layer)
    validate_get_tile_data(mvt_layer)
    validate_extent(mvt_layer)
    validate_tile_size(mvt_layer)
    validate_max_zoom(mvt_layer)
    validate_min_zoom(mvt_layer)
    validate_max_cache_size(mvt_layer)
    validate_max_cache_byte_size(mvt_layer)
    validate_refinement_strategy(mvt_layer)
    validate_z_range(mvt_layer)
    validate_max_requests(mvt_layer)
    validate_zoom_offset(mvt_layer)
    validate_filled(mvt_layer)
    validate_stroked(mvt_layer)
    validate_line_width_max_pixels(mvt_layer)
    validate_line_width_min_pixels(mvt_layer)
    validate_line_width_scale(mvt_layer)
    validate_line_width_units(mvt_layer)
    validate_point_radius_max_pixels(mvt_layer)
    validate_point_radius_min_pixels(mvt_layer)
    validate_point_radius_scale(mvt_layer)
    validate_point_radius_units(mvt_layer)
    validate_point_antialiasing(mvt_layer)
    validate_point_billboard(mvt_layer)
    validate_get_fill_color(mvt_layer)
    validate_get_line_color(mvt_layer)
    validate_get_line_width(mvt_layer)
    validate_get_point_radius(mvt_layer)
    validate_icon_atlas(mvt_layer)
    validate_icon_mapping(mvt_layer)
    validate_icon_size_max_pixels(mvt_layer)
    validate_icon_size_min_pixels(mvt_layer)
    validate_icon_size_scale(mvt_layer)
    validate_icon_size_units(mvt_layer)
    validate_icon_alpha_cutoff(mvt_layer)
    validate_icon_billboard(mvt_layer)
    validate_get_icon(mvt_layer)
    validate_get_icon_angle(mvt_layer)
    validate_get_icon_color(mvt_layer)
    validate_get_icon_pixel_offset(mvt_layer)
    validate_get_icon_size(mvt_layer)
    validate_text_size_max_pixels(mvt_layer)
    validate_text_size_min_pixels(mvt_layer)
    validate_text_size_scale(mvt_layer)
    validate_text_size_units(mvt_layer)
    validate_text_background(mvt_layer)
    validate_text_background_padding(mvt_layer)
    validate_text_font_family(mvt_layer)
    validate_text_font_weight(mvt_layer)
    validate_text_line_height(mvt_layer)
    validate_text_max_width(mvt_layer)
    validate_text_outline_color(mvt_layer)
    validate_text_outline_width(mvt_layer)
    validate_text_word_break(mvt_layer)
    validate_text_billboard(mvt_layer)
    validate_text_font_settings(mvt_layer)
    validate_get_text(mvt_layer)
    validate_get_text_angle(mvt_layer)
    validate_get_text_color(mvt_layer)
    validate_get_text_pixel_offset(mvt_layer)
    validate_get_text_size(mvt_layer)
    validate_get_text_anchor(mvt_layer)
    validate_get_text_alignment_baseline(mvt_layer)
    validate_get_text_background_color(mvt_layer)
    validate_get_text_border_color(mvt_layer)
    validate_get_text_border_width(mvt_layer)
    validate_line_joint_rounded(mvt_layer)
    validate_line_cap_rounded(mvt_layer)
    validate_line_miter_limit(mvt_layer)
    validate_line_billboard(mvt_layer)
    validate_extruded(mvt_layer)
    validate_wireframe(mvt_layer)
    validate_elevation_scale(mvt_layer)
    validate_material(mvt_layer)
    validate_get_elevation(mvt_layer)
    validate_point_type(mvt_layer)
    validate_unique_id_property(mvt_layer)
    validate_highlighted_feature_id(mvt_layer)
    validate_binary(mvt_layer)
    validate_blending_mode(mvt_layer)
    validate_visibility_toggle(mvt_layer)
    validate_tooltip(mvt_layer)
  })

  add_layer(rdeck, mvt_layer)
}
#' @name mvt_layer
#' @export
update_mvt_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    get_tile_data = cur_value(),
    extent = cur_value(),
    tile_size = cur_value(),
    max_zoom = cur_value(),
    min_zoom = cur_value(),
    max_cache_size = cur_value(),
    max_cache_byte_size = cur_value(),
    refinement_strategy = cur_value(),
    z_range = cur_value(),
    max_requests = cur_value(),
    zoom_offset = cur_value(),
    filled = cur_value(),
    stroked = cur_value(),
    line_width_max_pixels = cur_value(),
    line_width_min_pixels = cur_value(),
    line_width_scale = cur_value(),
    line_width_units = cur_value(),
    point_radius_max_pixels = cur_value(),
    point_radius_min_pixels = cur_value(),
    point_radius_scale = cur_value(),
    point_radius_units = cur_value(),
    point_antialiasing = cur_value(),
    point_billboard = cur_value(),
    get_fill_color = cur_value(),
    get_line_color = cur_value(),
    get_line_width = cur_value(),
    get_point_radius = cur_value(),
    icon_atlas = cur_value(),
    icon_mapping = cur_value(),
    icon_size_max_pixels = cur_value(),
    icon_size_min_pixels = cur_value(),
    icon_size_scale = cur_value(),
    icon_size_units = cur_value(),
    icon_alpha_cutoff = cur_value(),
    icon_billboard = cur_value(),
    get_icon = cur_value(),
    get_icon_angle = cur_value(),
    get_icon_color = cur_value(),
    get_icon_pixel_offset = cur_value(),
    get_icon_size = cur_value(),
    text_size_max_pixels = cur_value(),
    text_size_min_pixels = cur_value(),
    text_size_scale = cur_value(),
    text_size_units = cur_value(),
    text_background = cur_value(),
    text_background_padding = cur_value(),
    text_font_family = cur_value(),
    text_font_weight = cur_value(),
    text_line_height = cur_value(),
    text_max_width = cur_value(),
    text_outline_color = cur_value(),
    text_outline_width = cur_value(),
    text_word_break = cur_value(),
    text_billboard = cur_value(),
    text_font_settings = cur_value(),
    get_text = cur_value(),
    get_text_angle = cur_value(),
    get_text_color = cur_value(),
    get_text_pixel_offset = cur_value(),
    get_text_size = cur_value(),
    get_text_anchor = cur_value(),
    get_text_alignment_baseline = cur_value(),
    get_text_background_color = cur_value(),
    get_text_border_color = cur_value(),
    get_text_border_width = cur_value(),
    line_joint_rounded = cur_value(),
    line_cap_rounded = cur_value(),
    line_miter_limit = cur_value(),
    line_billboard = cur_value(),
    extruded = cur_value(),
    wireframe = cur_value(),
    elevation_scale = cur_value(),
    material = cur_value(),
    get_elevation = cur_value(),
    point_type = cur_value(),
    unique_id_property = cur_value(),
    highlighted_feature_id = cur_value(),
    binary = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_fill_color <- rlang::enquo(get_fill_color)
  get_line_color <- rlang::enquo(get_line_color)
  get_line_width <- rlang::enquo(get_line_width)
  get_point_radius <- rlang::enquo(get_point_radius)
  get_icon <- rlang::enquo(get_icon)
  get_icon_angle <- rlang::enquo(get_icon_angle)
  get_icon_color <- rlang::enquo(get_icon_color)
  get_icon_pixel_offset <- rlang::enquo(get_icon_pixel_offset)
  get_icon_size <- rlang::enquo(get_icon_size)
  get_text <- rlang::enquo(get_text)
  get_text_angle <- rlang::enquo(get_text_angle)
  get_text_color <- rlang::enquo(get_text_color)
  get_text_pixel_offset <- rlang::enquo(get_text_pixel_offset)
  get_text_size <- rlang::enquo(get_text_size)
  get_text_anchor <- rlang::enquo(get_text_anchor)
  get_text_alignment_baseline <- rlang::enquo(get_text_alignment_baseline)
  get_text_background_color <- rlang::enquo(get_text_background_color)
  get_text_border_color <- rlang::enquo(get_text_border_color)
  get_text_border_width <- rlang::enquo(get_text_border_width)
  get_elevation <- rlang::enquo(get_elevation)
  tooltip <- rlang::enquo(tooltip)
  mvt_layer <- with_layer_create_errors(
    new_layer(
      type = "MVTLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      get_tile_data = get_tile_data,
      extent = extent,
      tile_size = tile_size,
      max_zoom = max_zoom,
      min_zoom = min_zoom,
      max_cache_size = max_cache_size,
      max_cache_byte_size = max_cache_byte_size,
      refinement_strategy = refinement_strategy,
      z_range = z_range,
      max_requests = max_requests,
      zoom_offset = zoom_offset,
      filled = filled,
      stroked = stroked,
      line_width_max_pixels = line_width_max_pixels,
      line_width_min_pixels = line_width_min_pixels,
      line_width_scale = line_width_scale,
      line_width_units = line_width_units,
      point_radius_max_pixels = point_radius_max_pixels,
      point_radius_min_pixels = point_radius_min_pixels,
      point_radius_scale = point_radius_scale,
      point_radius_units = point_radius_units,
      point_antialiasing = point_antialiasing,
      point_billboard = point_billboard,
      get_fill_color = accessor(get_fill_color, data),
      get_line_color = accessor(get_line_color, data),
      get_line_width = accessor(get_line_width, data),
      get_point_radius = accessor(get_point_radius, data),
      icon_atlas = icon_atlas,
      icon_mapping = icon_mapping,
      icon_size_max_pixels = icon_size_max_pixels,
      icon_size_min_pixels = icon_size_min_pixels,
      icon_size_scale = icon_size_scale,
      icon_size_units = icon_size_units,
      icon_alpha_cutoff = icon_alpha_cutoff,
      icon_billboard = icon_billboard,
      get_icon = accessor(get_icon, data),
      get_icon_angle = accessor(get_icon_angle, data),
      get_icon_color = accessor(get_icon_color, data),
      get_icon_pixel_offset = accessor(get_icon_pixel_offset, data),
      get_icon_size = accessor(get_icon_size, data),
      text_size_max_pixels = text_size_max_pixels,
      text_size_min_pixels = text_size_min_pixels,
      text_size_scale = text_size_scale,
      text_size_units = text_size_units,
      text_background = text_background,
      text_background_padding = text_background_padding,
      text_font_family = text_font_family,
      text_font_weight = text_font_weight,
      text_line_height = text_line_height,
      text_max_width = text_max_width,
      text_outline_color = text_outline_color,
      text_outline_width = text_outline_width,
      text_word_break = text_word_break,
      text_billboard = text_billboard,
      text_font_settings = text_font_settings,
      get_text = accessor(get_text, data),
      get_text_angle = accessor(get_text_angle, data),
      get_text_color = accessor(get_text_color, data),
      get_text_pixel_offset = accessor(get_text_pixel_offset, data),
      get_text_size = accessor(get_text_size, data),
      get_text_anchor = accessor(get_text_anchor, data),
      get_text_alignment_baseline = accessor(get_text_alignment_baseline, data),
      get_text_background_color = accessor(get_text_background_color, data),
      get_text_border_color = accessor(get_text_border_color, data),
      get_text_border_width = accessor(get_text_border_width, data),
      line_joint_rounded = line_joint_rounded,
      line_cap_rounded = line_cap_rounded,
      line_miter_limit = line_miter_limit,
      line_billboard = line_billboard,
      extruded = extruded,
      wireframe = wireframe,
      elevation_scale = elevation_scale,
      material = material,
      get_elevation = accessor(get_elevation, data),
      point_type = point_type,
      unique_id_property = unique_id_property,
      highlighted_feature_id = highlighted_feature_id,
      binary = binary,
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(mvt_layer)
    validate_name(mvt_layer)
    validate_group_name(mvt_layer)
    validate_data(mvt_layer)
    validate_visible(mvt_layer)
    validate_pickable(mvt_layer)
    validate_opacity(mvt_layer)
    validate_wrap_longitude(mvt_layer)
    validate_position_format(mvt_layer)
    validate_color_format(mvt_layer)
    validate_auto_highlight(mvt_layer)
    validate_highlight_color(mvt_layer)
    validate_get_tile_data(mvt_layer)
    validate_extent(mvt_layer)
    validate_tile_size(mvt_layer)
    validate_max_zoom(mvt_layer)
    validate_min_zoom(mvt_layer)
    validate_max_cache_size(mvt_layer)
    validate_max_cache_byte_size(mvt_layer)
    validate_refinement_strategy(mvt_layer)
    validate_z_range(mvt_layer)
    validate_max_requests(mvt_layer)
    validate_zoom_offset(mvt_layer)
    validate_filled(mvt_layer)
    validate_stroked(mvt_layer)
    validate_line_width_max_pixels(mvt_layer)
    validate_line_width_min_pixels(mvt_layer)
    validate_line_width_scale(mvt_layer)
    validate_line_width_units(mvt_layer)
    validate_point_radius_max_pixels(mvt_layer)
    validate_point_radius_min_pixels(mvt_layer)
    validate_point_radius_scale(mvt_layer)
    validate_point_radius_units(mvt_layer)
    validate_point_antialiasing(mvt_layer)
    validate_point_billboard(mvt_layer)
    validate_get_fill_color(mvt_layer)
    validate_get_line_color(mvt_layer)
    validate_get_line_width(mvt_layer)
    validate_get_point_radius(mvt_layer)
    validate_icon_atlas(mvt_layer)
    validate_icon_mapping(mvt_layer)
    validate_icon_size_max_pixels(mvt_layer)
    validate_icon_size_min_pixels(mvt_layer)
    validate_icon_size_scale(mvt_layer)
    validate_icon_size_units(mvt_layer)
    validate_icon_alpha_cutoff(mvt_layer)
    validate_icon_billboard(mvt_layer)
    validate_get_icon(mvt_layer)
    validate_get_icon_angle(mvt_layer)
    validate_get_icon_color(mvt_layer)
    validate_get_icon_pixel_offset(mvt_layer)
    validate_get_icon_size(mvt_layer)
    validate_text_size_max_pixels(mvt_layer)
    validate_text_size_min_pixels(mvt_layer)
    validate_text_size_scale(mvt_layer)
    validate_text_size_units(mvt_layer)
    validate_text_background(mvt_layer)
    validate_text_background_padding(mvt_layer)
    validate_text_font_family(mvt_layer)
    validate_text_font_weight(mvt_layer)
    validate_text_line_height(mvt_layer)
    validate_text_max_width(mvt_layer)
    validate_text_outline_color(mvt_layer)
    validate_text_outline_width(mvt_layer)
    validate_text_word_break(mvt_layer)
    validate_text_billboard(mvt_layer)
    validate_text_font_settings(mvt_layer)
    validate_get_text(mvt_layer)
    validate_get_text_angle(mvt_layer)
    validate_get_text_color(mvt_layer)
    validate_get_text_pixel_offset(mvt_layer)
    validate_get_text_size(mvt_layer)
    validate_get_text_anchor(mvt_layer)
    validate_get_text_alignment_baseline(mvt_layer)
    validate_get_text_background_color(mvt_layer)
    validate_get_text_border_color(mvt_layer)
    validate_get_text_border_width(mvt_layer)
    validate_line_joint_rounded(mvt_layer)
    validate_line_cap_rounded(mvt_layer)
    validate_line_miter_limit(mvt_layer)
    validate_line_billboard(mvt_layer)
    validate_extruded(mvt_layer)
    validate_wireframe(mvt_layer)
    validate_elevation_scale(mvt_layer)
    validate_material(mvt_layer)
    validate_get_elevation(mvt_layer)
    validate_point_type(mvt_layer)
    validate_unique_id_property(mvt_layer)
    validate_highlighted_feature_id(mvt_layer)
    validate_binary(mvt_layer)
    validate_blending_mode(mvt_layer)
    validate_visibility_toggle(mvt_layer)
    validate_tooltip(mvt_layer)
  })

  update_layer(rdeck, mvt_layer)
}

#' @name simple_mesh_layer
#' @autoglobal
#' @export
add_simple_mesh_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "SimpleMeshLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    mesh = NULL,
    texture = NULL,
    size_scale = 1,
    wireframe = FALSE,
    material = TRUE,
    get_position = position,
    get_color = "#000000ff",
    get_orientation = c(0, 0, 0),
    get_scale = c(1, 1, 1),
    get_translation = c(0, 0, 0),
    get_transform_matrix = NULL,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_color <- rlang::enquo(get_color)
  get_orientation <- rlang::enquo(get_orientation)
  get_scale <- rlang::enquo(get_scale)
  get_translation <- rlang::enquo(get_translation)
  get_transform_matrix <- rlang::enquo(get_transform_matrix)
  tooltip <- rlang::enquo(tooltip)

  simple_mesh_layer <- with_layer_create_errors(
    new_layer(
      type = "SimpleMeshLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      mesh = mesh,
      texture = texture,
      size_scale = size_scale,
      wireframe = wireframe,
      material = material,
      get_position = accessor(get_position, data),
      get_color = accessor(get_color, data),
      get_orientation = accessor(get_orientation, data),
      get_scale = accessor(get_scale, data),
      get_translation = accessor(get_translation, data),
      get_transform_matrix = accessor(get_transform_matrix, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(simple_mesh_layer)
    validate_name(simple_mesh_layer)
    validate_group_name(simple_mesh_layer)
    validate_data(simple_mesh_layer)
    validate_visible(simple_mesh_layer)
    validate_pickable(simple_mesh_layer)
    validate_opacity(simple_mesh_layer)
    validate_wrap_longitude(simple_mesh_layer)
    validate_position_format(simple_mesh_layer)
    validate_color_format(simple_mesh_layer)
    validate_auto_highlight(simple_mesh_layer)
    validate_highlight_color(simple_mesh_layer)
    validate_mesh(simple_mesh_layer)
    validate_texture(simple_mesh_layer)
    validate_size_scale(simple_mesh_layer)
    validate_wireframe(simple_mesh_layer)
    validate_material(simple_mesh_layer)
    validate_get_position(simple_mesh_layer)
    validate_get_color(simple_mesh_layer)
    validate_get_orientation(simple_mesh_layer)
    validate_get_scale(simple_mesh_layer)
    validate_get_translation(simple_mesh_layer)
    validate_get_transform_matrix(simple_mesh_layer)
    validate_blending_mode(simple_mesh_layer)
    validate_visibility_toggle(simple_mesh_layer)
    validate_tooltip(simple_mesh_layer)
  })

  add_layer(rdeck, simple_mesh_layer)
}
#' @name simple_mesh_layer
#' @export
update_simple_mesh_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    mesh = cur_value(),
    texture = cur_value(),
    size_scale = cur_value(),
    wireframe = cur_value(),
    material = cur_value(),
    get_position = cur_value(),
    get_color = cur_value(),
    get_orientation = cur_value(),
    get_scale = cur_value(),
    get_translation = cur_value(),
    get_transform_matrix = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_color <- rlang::enquo(get_color)
  get_orientation <- rlang::enquo(get_orientation)
  get_scale <- rlang::enquo(get_scale)
  get_translation <- rlang::enquo(get_translation)
  get_transform_matrix <- rlang::enquo(get_transform_matrix)
  tooltip <- rlang::enquo(tooltip)
  simple_mesh_layer <- with_layer_create_errors(
    new_layer(
      type = "SimpleMeshLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      mesh = mesh,
      texture = texture,
      size_scale = size_scale,
      wireframe = wireframe,
      material = material,
      get_position = accessor(get_position, data),
      get_color = accessor(get_color, data),
      get_orientation = accessor(get_orientation, data),
      get_scale = accessor(get_scale, data),
      get_translation = accessor(get_translation, data),
      get_transform_matrix = accessor(get_transform_matrix, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(simple_mesh_layer)
    validate_name(simple_mesh_layer)
    validate_group_name(simple_mesh_layer)
    validate_data(simple_mesh_layer)
    validate_visible(simple_mesh_layer)
    validate_pickable(simple_mesh_layer)
    validate_opacity(simple_mesh_layer)
    validate_wrap_longitude(simple_mesh_layer)
    validate_position_format(simple_mesh_layer)
    validate_color_format(simple_mesh_layer)
    validate_auto_highlight(simple_mesh_layer)
    validate_highlight_color(simple_mesh_layer)
    validate_mesh(simple_mesh_layer)
    validate_texture(simple_mesh_layer)
    validate_size_scale(simple_mesh_layer)
    validate_wireframe(simple_mesh_layer)
    validate_material(simple_mesh_layer)
    validate_get_position(simple_mesh_layer)
    validate_get_color(simple_mesh_layer)
    validate_get_orientation(simple_mesh_layer)
    validate_get_scale(simple_mesh_layer)
    validate_get_translation(simple_mesh_layer)
    validate_get_transform_matrix(simple_mesh_layer)
    validate_blending_mode(simple_mesh_layer)
    validate_visibility_toggle(simple_mesh_layer)
    validate_tooltip(simple_mesh_layer)
  })

  update_layer(rdeck, simple_mesh_layer)
}

#' @name scenegraph_layer
#' @autoglobal
#' @export
add_scenegraph_layer <- function(
    rdeck,
    ...,
    id = uuid::UUIDgenerate(),
    name = "ScenegraphLayer",
    group_name = NULL,
    data = NULL,
    visible = TRUE,
    pickable = FALSE,
    opacity = 1,
    wrap_longitude = FALSE,
    position_format = "XY",
    color_format = "RGBA",
    auto_highlight = FALSE,
    highlight_color = "#00008080",
    scenegraph = NULL,
    get_scene = NULL,
    get_animator = NULL,
    size_scale = 1,
    size_min_pixels = 0,
    size_max_pixels = 9007199254740991,
    get_position = position,
    get_color = "#ffffffff",
    get_orientation = c(0, 0, 0),
    get_scale = c(1, 1, 1),
    get_translation = c(0, 0, 0),
    get_transform_matrix = NULL,
    blending_mode = "normal",
    visibility_toggle = TRUE,
    tooltip = NULL) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_color <- rlang::enquo(get_color)
  get_orientation <- rlang::enquo(get_orientation)
  get_scale <- rlang::enquo(get_scale)
  get_translation <- rlang::enquo(get_translation)
  get_transform_matrix <- rlang::enquo(get_transform_matrix)
  tooltip <- rlang::enquo(tooltip)

  scenegraph_layer <- with_layer_create_errors(
    new_layer(
      type = "ScenegraphLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      scenegraph = scenegraph,
      get_scene = get_scene,
      get_animator = get_animator,
      size_scale = size_scale,
      size_min_pixels = size_min_pixels,
      size_max_pixels = size_max_pixels,
      get_position = accessor(get_position, data),
      get_color = accessor(get_color, data),
      get_orientation = accessor(get_orientation, data),
      get_scale = accessor(get_scale, data),
      get_translation = accessor(get_translation, data),
      get_transform_matrix = accessor(get_transform_matrix, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(scenegraph_layer)
    validate_name(scenegraph_layer)
    validate_group_name(scenegraph_layer)
    validate_data(scenegraph_layer)
    validate_visible(scenegraph_layer)
    validate_pickable(scenegraph_layer)
    validate_opacity(scenegraph_layer)
    validate_wrap_longitude(scenegraph_layer)
    validate_position_format(scenegraph_layer)
    validate_color_format(scenegraph_layer)
    validate_auto_highlight(scenegraph_layer)
    validate_highlight_color(scenegraph_layer)
    validate_scenegraph(scenegraph_layer)
    validate_get_scene(scenegraph_layer)
    validate_get_animator(scenegraph_layer)
    validate_size_scale(scenegraph_layer)
    validate_size_min_pixels(scenegraph_layer)
    validate_size_max_pixels(scenegraph_layer)
    validate_get_position(scenegraph_layer)
    validate_get_color(scenegraph_layer)
    validate_get_orientation(scenegraph_layer)
    validate_get_scale(scenegraph_layer)
    validate_get_translation(scenegraph_layer)
    validate_get_transform_matrix(scenegraph_layer)
    validate_blending_mode(scenegraph_layer)
    validate_visibility_toggle(scenegraph_layer)
    validate_tooltip(scenegraph_layer)
  })

  add_layer(rdeck, scenegraph_layer)
}
#' @name scenegraph_layer
#' @export
update_scenegraph_layer <- function(
    rdeck,
    ...,
    id,
    name = cur_value(),
    group_name = cur_value(),
    data = cur_value(),
    visible = cur_value(),
    pickable = cur_value(),
    opacity = cur_value(),
    wrap_longitude = cur_value(),
    position_format = cur_value(),
    color_format = cur_value(),
    auto_highlight = cur_value(),
    highlight_color = cur_value(),
    scenegraph = cur_value(),
    get_scene = cur_value(),
    get_animator = cur_value(),
    size_scale = cur_value(),
    size_min_pixels = cur_value(),
    size_max_pixels = cur_value(),
    get_position = cur_value(),
    get_color = cur_value(),
    get_orientation = cur_value(),
    get_scale = cur_value(),
    get_translation = cur_value(),
    get_transform_matrix = cur_value(),
    blending_mode = cur_value(),
    visibility_toggle = cur_value(),
    tooltip = cur_value()) {
  with_layer_create_errors({
    rlang::check_required(rdeck)
    tidyassert::assert(rlang::is_string(id))
    check_dots(...)
  })

  highlight_color <- rlang::enquo(highlight_color)
  get_position <- rlang::enquo(get_position)
  get_color <- rlang::enquo(get_color)
  get_orientation <- rlang::enquo(get_orientation)
  get_scale <- rlang::enquo(get_scale)
  get_translation <- rlang::enquo(get_translation)
  get_transform_matrix <- rlang::enquo(get_transform_matrix)
  tooltip <- rlang::enquo(tooltip)
  scenegraph_layer <- with_layer_create_errors(
    new_layer(
      type = "ScenegraphLayer",
      ...,
      id = id,
      name = name,
      group_name = group_name,
      data = data,
      visible = visible,
      pickable = pickable,
      opacity = opacity,
      wrap_longitude = wrap_longitude,
      position_format = position_format,
      color_format = color_format,
      auto_highlight = auto_highlight,
      highlight_color = accessor(highlight_color, data),
      scenegraph = scenegraph,
      get_scene = get_scene,
      get_animator = get_animator,
      size_scale = size_scale,
      size_min_pixels = size_min_pixels,
      size_max_pixels = size_max_pixels,
      get_position = accessor(get_position, data),
      get_color = accessor(get_color, data),
      get_orientation = accessor(get_orientation, data),
      get_scale = accessor(get_scale, data),
      get_translation = accessor(get_translation, data),
      get_transform_matrix = accessor(get_transform_matrix, data),
      blending_mode = blending_mode,
      visibility_toggle = visibility_toggle,
      tooltip = tooltip(tooltip, data)
    )
  )

  with_layer_create_errors({
    validate_id(scenegraph_layer)
    validate_name(scenegraph_layer)
    validate_group_name(scenegraph_layer)
    validate_data(scenegraph_layer)
    validate_visible(scenegraph_layer)
    validate_pickable(scenegraph_layer)
    validate_opacity(scenegraph_layer)
    validate_wrap_longitude(scenegraph_layer)
    validate_position_format(scenegraph_layer)
    validate_color_format(scenegraph_layer)
    validate_auto_highlight(scenegraph_layer)
    validate_highlight_color(scenegraph_layer)
    validate_scenegraph(scenegraph_layer)
    validate_get_scene(scenegraph_layer)
    validate_get_animator(scenegraph_layer)
    validate_size_scale(scenegraph_layer)
    validate_size_min_pixels(scenegraph_layer)
    validate_size_max_pixels(scenegraph_layer)
    validate_get_position(scenegraph_layer)
    validate_get_color(scenegraph_layer)
    validate_get_orientation(scenegraph_layer)
    validate_get_scale(scenegraph_layer)
    validate_get_translation(scenegraph_layer)
    validate_get_transform_matrix(scenegraph_layer)
    validate_blending_mode(scenegraph_layer)
    validate_visibility_toggle(scenegraph_layer)
    validate_tooltip(scenegraph_layer)
  })

  update_layer(rdeck, scenegraph_layer)
}
anthonynorth/rdeck documentation built on Feb. 2, 2024, 1:12 p.m.