{
  "traces": {
    "bar3d": {
      "categories": ["gl3d", "showLegend"],
      "meta": {
        "description": "True 3D bars on an x/y grid (a Holochart extension): lit boxes of height z at (x, y), categorical or numeric, stacked across traces, colored per bar or by height, one instanced draw call per trace.",
        "docsPage": "bar3d"
      },
      "attributes": {
        "description": "True 3D bars on an x/y grid (a Holochart extension): lit boxes of height `z` at (`x`, `y`), categorical or numeric, stacked across traces with `stackgroup`, colored per bar or by height through a colorscale, one instanced draw call per trace.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "base", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "dflt": "all",
          "editType": "none",
          "description": "Which fields hover labels show: the position (`x`, `y`), the height (`z`), the bar's `base` (when it has one or is stacked), `text` and the trace `name`; `'skip'` also turns hover events off.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "X position of each bar's center (numbers, dates or categories, per the scene's x axis).",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Y position of each bar's center (numbers, dates or categories, per the scene's y axis).",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Bar heights along the z axis, from `base` (or the top of the bar below it with `stackgroup`). Negative heights go down.",
          "valType": "data_array"
        },
        "base": {
          "arrayOk": true,
          "editType": "calc",
          "description": "Where the bars start on the z axis (z data units), or one per bar. Default 0. In a `stackgroup`, only the bottom bar of each stack uses it.",
          "valType": "number"
        },
        "width": {
          "min": 0,
          "arrayOk": true,
          "editType": "calc",
          "description": "Bar width along the x axis, in x axis units (one category is 1, dates in ms), or one per bar. Default: 0.8 of the smallest distance between the trace's distinct x positions (1 with a single position).",
          "valType": "number"
        },
        "depth": {
          "min": 0,
          "arrayOk": true,
          "editType": "calc",
          "description": "Bar depth along the y axis, in y axis units (one category is 1, dates in ms), or one per bar. Default: 0.8 of the smallest distance between the trace's distinct y positions (1 with a single position).",
          "valType": "number"
        },
        "stackgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Stack this trace's bars on those of earlier `bar3d` traces of the same scene with the same `stackgroup` (Plotly's `barmode: 'stack'`, per trace like scatter's `stackgroup`): bars at the same (x, y) stack in trace order. Empty: no stacking (bars at the same position overlap).",
          "valType": "string"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per bar, shown in hover labels and as `%{text}` in templates.",
          "valType": "string"
        },
        "marker": {
          "editType": "calc",
          "description": "Bar style.",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Bar color, or one per bar: colors, or numbers mapped through `marker.colorscale`. With a colorscale (or `marker.coloraxis`) and no color array, the bars are colored by their height `z`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "editType": "style",
            "description": "Bar opacity (times the trace `opacity`). Translucent bars are sorted back to front as the camera moves.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "The edges of the boxes.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "editType": "style",
              "description": "Color of the box edges.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 1,
              "editType": "style",
              "description": "Width of the box edges in CSS px, drawn in the faces at any depth (half on each face of an edge); 0 for none.",
              "valType": "number"
            }
          }
        },
        "lighting": {
          "editType": "calc",
          "description": "Plotly's lighting model: coefficients of the ambient, diffuse and specular light. With `scene.lighting`, they scale the scene's lights.",
          "role": "object",
          "ambient": {
            "min": 0,
            "max": 1,
            "dflt": 0.55,
            "editType": "calc",
            "description": "Ambient light: the share of the color shown whatever the direction of the light.",
            "valType": "number"
          },
          "diffuse": {
            "min": 0,
            "max": 1,
            "dflt": 0.6,
            "editType": "calc",
            "description": "Diffuse light: the share of the color lit by the light (Lambert).",
            "valType": "number"
          },
          "specular": {
            "min": 0,
            "max": 2,
            "dflt": 0.08,
            "editType": "calc",
            "description": "Specular highlights: the light reflected toward the eye.",
            "valType": "number"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "dflt": 0.5,
            "editType": "calc",
            "description": "Roughness of the surface: the spread of the specular highlights.",
            "valType": "number"
          },
          "fresnel": {
            "min": 0,
            "max": 5,
            "dflt": 0.2,
            "editType": "calc",
            "description": "Fresnel reflection: how much more light surfaces reflect at grazing angles.",
            "valType": "number"
          }
        },
        "lightposition": {
          "editType": "calc",
          "description": "Position of the light (Plotly's model, without `scene.lighting`), in clip space: it moves with the view.",
          "role": "object",
          "x": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "x of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "y": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "y of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "z": {
            "min": -100000,
            "max": 100000,
            "dflt": 0,
            "editType": "calc",
            "description": "z of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of the surface (Holochart extension). Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of x values in hover labels. Default: the scene's x axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of y values in hover labels. Default: the scene's y axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels. Default: the scene's z axis format.",
          "valType": "string"
        }
      }
    },
    "cone": {
      "categories": ["gl3d", "showLegend"],
      "meta": {
        "description": "A 3D vector field drawn as cones sized and colored by the vector norms (one instanced draw call), with Plotly’s lighting.",
        "docsPage": "cone",
        "plotlyEquivalent": "cone"
      },
      "attributes": {
        "description": "A 3D vector field drawn as cones: one lit cone per position, pointing along its vector, sized by the vector norms and colored by them through a colorscale (one instanced draw call).",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "u", "v", "w", "norm", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "dflt": "x+y+z+norm+text+name",
          "editType": "none",
          "description": "Which fields hover labels show: the position (`x`, `y`, `z`), the vector (`u`, `v`, `w`), its `norm`, `text` and the trace `name`; `'skip'` also turns hover events off.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "X coordinates of the cones (numbers, dates or categories).",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Y coordinates of the cones (numbers, dates or categories).",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Z coordinates of the cones (numbers, dates or categories).",
          "valType": "data_array"
        },
        "u": {
          "editType": "calc",
          "role": "data",
          "description": "x component of the vector field at each position (numbers).",
          "valType": "data_array"
        },
        "v": {
          "editType": "calc",
          "role": "data",
          "description": "y component of the vector field at each position (numbers).",
          "valType": "data_array"
        },
        "w": {
          "editType": "calc",
          "role": "data",
          "description": "z component of the vector field at each position (numbers).",
          "valType": "data_array"
        },
        "sizemode": {
          "values": ["scaled", "absolute", "raw"],
          "dflt": "scaled",
          "editType": "calc",
          "description": "How cone lengths follow the vector norms. `scaled`: scaled so that the cones fit between neighbouring positions, times `sizeref`. `absolute`: the same, with `sizeref` in vector-norm units (the largest vector gets `sizeref`'s length). `raw`: the vectors' own lengths in data units, times `sizeref`.",
          "valType": "enumerated"
        },
        "sizeref": {
          "min": 0,
          "editType": "calc",
          "description": "Scale of the cones (see `sizemode`). Default: 1 with `sizemode: \"raw\"`, else 0.5.",
          "valType": "number"
        },
        "anchor": {
          "values": ["tip", "tail", "cm", "center"],
          "dflt": "cm",
          "editType": "calc",
          "description": "Which part of the cone sits at its position: the tip, the tail (base), the center of mass (`cm`, a quarter of the way from tail to tip) or the middle (`center`).",
          "valType": "enumerated"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per cone, shown in hover labels and as `%{text}` in templates.",
          "valType": "string"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale for numeric `u/v/w norm` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "cauto": {
          "editType": "style",
          "description": "Compute the color domain from the numeric `u/v/w norm` values. Defaults to false when both `cmin` and `cmax` are given.",
          "valType": "boolean"
        },
        "cmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
          "valType": "number"
        },
        "cmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
          "valType": "number"
        },
        "cmid": {
          "editType": "style",
          "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
          "valType": "subplotid"
        },
        "lighting": {
          "editType": "calc",
          "description": "Plotly's lighting model: coefficients of the ambient, diffuse and specular light. With `scene.lighting`, they scale the scene's lights.",
          "role": "object",
          "ambient": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Ambient light: the share of the color shown whatever the direction of the light.",
            "valType": "number"
          },
          "diffuse": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Diffuse light: the share of the color lit by the light (Lambert).",
            "valType": "number"
          },
          "specular": {
            "min": 0,
            "max": 2,
            "dflt": 0.05,
            "editType": "calc",
            "description": "Specular highlights: the light reflected toward the eye.",
            "valType": "number"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "dflt": 0.5,
            "editType": "calc",
            "description": "Roughness of the surface: the spread of the specular highlights.",
            "valType": "number"
          },
          "fresnel": {
            "min": 0,
            "max": 5,
            "dflt": 0.2,
            "editType": "calc",
            "description": "Fresnel reflection: how much more light surfaces reflect at grazing angles.",
            "valType": "number"
          },
          "vertexnormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 1e-12,
            "editType": "calc",
            "description": "Vertex normals ignore triangle normals shorter than this (tiny triangles do not skew smooth shading).",
            "valType": "number"
          },
          "facenormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 0.000001,
            "editType": "calc",
            "description": "Triangles whose normal is shorter than this get no normal in flat shading (degenerate triangles).",
            "valType": "number"
          }
        },
        "lightposition": {
          "editType": "calc",
          "description": "Position of the light (Plotly's model, without `scene.lighting`), in clip space: it moves with the view.",
          "role": "object",
          "x": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "x of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "y": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "y of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "z": {
            "min": -100000,
            "max": 100000,
            "dflt": 0,
            "editType": "calc",
            "description": "z of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of x values in hover labels. Default: the scene's x axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of y values in hover labels. Default: the scene's y axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels. Default: the scene's z axis format.",
          "valType": "string"
        },
        "uhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of u values in hover labels. Default: the scene's x axis format.",
          "valType": "string"
        },
        "vhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of v values in hover labels. Default: the scene's y axis format.",
          "valType": "string"
        },
        "whoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of w values in hover labels. Default: the scene's z axis format.",
          "valType": "string"
        }
      }
    },
    "isosurface": {
      "categories": ["gl3d", "showLegend"],
      "meta": {
        "description": "Isosurfaces of a scalar field on a 3D grid, between two values, with caps, slices and a space frame, colored by value.",
        "docsPage": "isosurface",
        "plotlyEquivalent": "isosurface"
      },
      "attributes": {
        "description": "Isosurfaces of a scalar field on a 3D grid: surfaces where the value is constant, between `isomin` and `isomax`, with caps, slices and a space frame, colored by value.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "X coordinate of every grid point (numbers, dates or categories): `x`, `y`, `z` and `value` are flattened columns of a rectilinear grid, one entry per point, the axes nested in any order.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Y coordinate of every grid point (numbers, dates or categories): `x`, `y`, `z` and `value` are flattened columns of a rectilinear grid, one entry per point, the axes nested in any order.",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Z coordinate of every grid point (numbers, dates or categories): `x`, `y`, `z` and `value` are flattened columns of a rectilinear grid, one entry per point, the axes nested in any order.",
          "valType": "data_array"
        },
        "value": {
          "editType": "calc",
          "role": "data",
          "description": "The value at every grid point (numbers): the field whose level surfaces are drawn and which the colorscale maps.",
          "valType": "data_array"
        },
        "isomin": {
          "editType": "calc",
          "description": "Lower end of the value range of the isosurfaces. Default: the smallest value.",
          "valType": "number"
        },
        "isomax": {
          "editType": "calc",
          "description": "Upper end of the value range of the isosurfaces. Default: the largest value.",
          "valType": "number"
        },
        "surface": {
          "editType": "calc",
          "description": "The isosurfaces.",
          "role": "object",
          "show": {
            "dflt": true,
            "editType": "calc",
            "description": "Draw the isosurfaces between `isomin` and `isomax`.",
            "valType": "boolean"
          },
          "count": {
            "min": 1,
            "dflt": 2,
            "editType": "calc",
            "description": "Number of isosurfaces, evenly spread from `isomin` to `isomax` (2: just those two; 1: the middle value).",
            "valType": "integer"
          },
          "fill": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "editType": "calc",
            "description": "Share of each surface triangle drawn: below 1 leaves a hole in each triangle (a lattice), 0 hides the surfaces.",
            "valType": "number"
          },
          "pattern": {
            "flags": ["A", "B", "C", "D", "E"],
            "extras": ["all", "odd", "even"],
            "dflt": "all",
            "editType": "calc",
            "description": "Which parts of the surfaces are drawn: every grid cell is cut into five tetrahedra (`A`–`D` at four corners, `E` in the middle); `'all'`, a combination such as `'A+B'`, or `'odd'` / `'even'` (only the cells whose `i + j + k` is odd / even: a checkerboard).",
            "valType": "flaglist"
          }
        },
        "spaceframe": {
          "editType": "calc",
          "description": "The space frame.",
          "role": "object",
          "show": {
            "dflt": false,
            "editType": "calc",
            "description": "Draw the space frame: the faces of the central tetrahedron of every grid cell inside `[isomin, isomax]`, useful with open surfaces or caps.",
            "valType": "boolean"
          },
          "fill": {
            "min": 0,
            "max": 1,
            "dflt": 0.15,
            "editType": "calc",
            "description": "Share of each space-frame triangle drawn (default 0.15: thin frames).",
            "valType": "number"
          }
        },
        "slices": {
          "editType": "calc",
          "description": "Slices through the grid.",
          "role": "object",
          "x": {
            "editType": "calc",
            "description": "Slices of constant x.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "calc",
              "description": "Draw slices: planes of constant x through the grid, where the values are in `[isomin, isomax]`.",
              "valType": "boolean"
            },
            "locations": {
              "editType": "calc",
              "description": "x positions of the slices (between grid planes: interpolated). Default: every inner grid plane of x.",
              "valType": "data_array"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each slice triangle drawn: below 1 leaves a hole in each triangle (a lattice), 0 hides the slices.",
              "valType": "number"
            }
          },
          "y": {
            "editType": "calc",
            "description": "Slices of constant y.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "calc",
              "description": "Draw slices: planes of constant y through the grid, where the values are in `[isomin, isomax]`.",
              "valType": "boolean"
            },
            "locations": {
              "editType": "calc",
              "description": "y positions of the slices (between grid planes: interpolated). Default: every inner grid plane of y.",
              "valType": "data_array"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each slice triangle drawn: below 1 leaves a hole in each triangle (a lattice), 0 hides the slices.",
              "valType": "number"
            }
          },
          "z": {
            "editType": "calc",
            "description": "Slices of constant z.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "calc",
              "description": "Draw slices: planes of constant z through the grid, where the values are in `[isomin, isomax]`.",
              "valType": "boolean"
            },
            "locations": {
              "editType": "calc",
              "description": "z positions of the slices (between grid planes: interpolated). Default: every inner grid plane of z.",
              "valType": "data_array"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each slice triangle drawn: below 1 leaves a hole in each triangle (a lattice), 0 hides the slices.",
              "valType": "number"
            }
          }
        },
        "caps": {
          "editType": "calc",
          "description": "Caps on the grid's boundary.",
          "role": "object",
          "x": {
            "editType": "calc",
            "description": "The caps at the grid's first and last x.",
            "role": "object",
            "show": {
              "dflt": true,
              "editType": "calc",
              "description": "Draw the caps: the grid's two boundary faces of constant x where the values are in `[isomin, isomax]`, which close the surfaces cut by the grid's edge.",
              "valType": "boolean"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each cap triangle drawn: below 1 leaves a hole in each triangle, 0 hides the caps.",
              "valType": "number"
            }
          },
          "y": {
            "editType": "calc",
            "description": "The caps at the grid's first and last y.",
            "role": "object",
            "show": {
              "dflt": true,
              "editType": "calc",
              "description": "Draw the caps: the grid's two boundary faces of constant y where the values are in `[isomin, isomax]`, which close the surfaces cut by the grid's edge.",
              "valType": "boolean"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each cap triangle drawn: below 1 leaves a hole in each triangle, 0 hides the caps.",
              "valType": "number"
            }
          },
          "z": {
            "editType": "calc",
            "description": "The caps at the grid's first and last z.",
            "role": "object",
            "show": {
              "dflt": true,
              "editType": "calc",
              "description": "Draw the caps: the grid's two boundary faces of constant z where the values are in `[isomin, isomax]`, which close the surfaces cut by the grid's edge.",
              "valType": "boolean"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each cap triangle drawn: below 1 leaves a hole in each triangle, 0 hides the caps.",
              "valType": "number"
            }
          }
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per grid point, shown in hover labels (after the value) and as `%{text}` in templates.",
          "valType": "string"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale for numeric `value` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "cauto": {
          "editType": "style",
          "description": "Compute the color domain from the numeric `value` values. Defaults to false when both `cmin` and `cmax` are given.",
          "valType": "boolean"
        },
        "cmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
          "valType": "number"
        },
        "cmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
          "valType": "number"
        },
        "cmid": {
          "editType": "style",
          "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
          "valType": "subplotid"
        },
        "flatshading": {
          "dflt": true,
          "editType": "calc",
          "description": "Flat shading: one normal per triangle (the default, as in Plotly: the extracted triangles share no vertices, so smooth shading looks the same).",
          "valType": "boolean"
        },
        "lighting": {
          "editType": "calc",
          "description": "Plotly's lighting model: coefficients of the ambient, diffuse and specular light. With `scene.lighting`, they scale the scene's lights.",
          "role": "object",
          "ambient": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Ambient light: the share of the color shown whatever the direction of the light.",
            "valType": "number"
          },
          "diffuse": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Diffuse light: the share of the color lit by the light (Lambert).",
            "valType": "number"
          },
          "specular": {
            "min": 0,
            "max": 2,
            "dflt": 0.05,
            "editType": "calc",
            "description": "Specular highlights: the light reflected toward the eye.",
            "valType": "number"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "dflt": 0.5,
            "editType": "calc",
            "description": "Roughness of the surface: the spread of the specular highlights.",
            "valType": "number"
          },
          "fresnel": {
            "min": 0,
            "max": 5,
            "dflt": 0.2,
            "editType": "calc",
            "description": "Fresnel reflection: how much more light surfaces reflect at grazing angles.",
            "valType": "number"
          },
          "vertexnormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 1e-12,
            "editType": "calc",
            "description": "Vertex normals ignore triangle normals shorter than this (tiny triangles do not skew smooth shading).",
            "valType": "number"
          },
          "facenormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 0,
            "editType": "calc",
            "description": "Triangles whose normal is shorter than this get no normal in flat shading (degenerate triangles).",
            "valType": "number"
          }
        },
        "lightposition": {
          "editType": "calc",
          "description": "Position of the light (Plotly's model, without `scene.lighting`), in clip space: it moves with the view.",
          "role": "object",
          "x": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "x of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "y": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "y of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "z": {
            "min": -100000,
            "max": 100000,
            "dflt": 0,
            "editType": "calc",
            "description": "z of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of the surface (Holochart extension). Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of x values in hover labels. Default: the scene's x axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of y values in hover labels. Default: the scene's y axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels. Default: the scene's z axis format.",
          "valType": "string"
        },
        "valuehoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of value values in hover labels. Default: the value with hover precision.",
          "valType": "string"
        }
      }
    },
    "mesh3d": {
      "categories": ["gl3d", "showLegend"],
      "meta": {
        "description": "A 3D triangle mesh: explicit triangles or ones derived from the vertices (Delaunay, convex hull, alpha shape), colored by intensity, per vertex, per triangle or in one color, lit with Plotly’s lighting model.",
        "docsPage": "mesh3d",
        "plotlyEquivalent": "mesh3d"
      },
      "attributes": {
        "description": "A 3D triangle mesh: vertices with explicit triangles, or triangles derived from the points (Delaunay, convex hull or alpha shape), colored by intensity through a colorscale, per vertex, per triangle or in one color, lit with Plotly’s lighting model.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "X coordinates of the vertices (numbers, dates or categories). `x`, `y` and `z` must have the same length.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Y coordinates of the vertices (numbers, dates or categories). `x`, `y` and `z` must have the same length.",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Z coordinates of the vertices (numbers, dates or categories). `x`, `y` and `z` must have the same length.",
          "valType": "data_array"
        },
        "i": {
          "editType": "calc",
          "description": "Index (into `x` / `y` / `z`) of the first vertex of each triangle: triangle `m` joins vertices `i[m]`, `j[m]` and `k[m]`. Give all three or none (then `alphahull` makes the triangles). Indices are rounded; one out of range hides the trace, as in Plotly.",
          "valType": "data_array"
        },
        "j": {
          "editType": "calc",
          "description": "Index (into `x` / `y` / `z`) of the second vertex of each triangle: triangle `m` joins vertices `i[m]`, `j[m]` and `k[m]`. Give all three or none (then `alphahull` makes the triangles). Indices are rounded; one out of range hides the trace, as in Plotly.",
          "valType": "data_array"
        },
        "k": {
          "editType": "calc",
          "description": "Index (into `x` / `y` / `z`) of the third vertex of each triangle: triangle `m` joins vertices `i[m]`, `j[m]` and `k[m]`. Give all three or none (then `alphahull` makes the triangles). Indices are rounded; one out of range hides the trace, as in Plotly.",
          "valType": "data_array"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per vertex (per triangle with cell colors: `intensitymode: \"cell\"` or `facecolor`), shown in hover labels and as `%{text}` in templates.",
          "valType": "string"
        },
        "delaunayaxis": {
          "values": ["x", "y", "z"],
          "dflt": "z",
          "editType": "calc",
          "description": "Without `i` / `j` / `k` and with `alphahull: -1`: the axis the points are projected along before their 2D Delaunay triangulation (`z` triangulates the x–y positions). Suits a single surface layer seen along this axis.",
          "valType": "enumerated"
        },
        "alphahull": {
          "dflt": -1,
          "editType": "calc",
          "description": "How triangles are derived from the vertices when `i` / `j` / `k` are not given: `-1` (default) a 2D Delaunay triangulation along `delaunayaxis`; `0` the convex hull; a positive value the alpha shape with this alpha (Delaunay tetrahedra with circumradius < 1 / alpha, in coordinates scaled to the unit cube per axis, as Plotly).",
          "valType": "number"
        },
        "intensity": {
          "editType": "calc",
          "description": "Values mapped through the colorscale: one per vertex (`intensitymode: \"vertex\"`, interpolated across triangles) or one per triangle (`\"cell\"`). Takes precedence over `vertexcolor`, `facecolor` and `color`.",
          "valType": "data_array"
        },
        "intensitymode": {
          "values": ["vertex", "cell"],
          "dflt": "vertex",
          "editType": "calc",
          "description": "Whether `intensity` holds one value per vertex or per triangle (cell).",
          "valType": "enumerated"
        },
        "color": {
          "editType": "calc",
          "description": "Color of the whole mesh (without `intensity`, `vertexcolor` and `facecolor`). Default: the trace color from the colorway.",
          "valType": "color"
        },
        "vertexcolor": {
          "editType": "calc",
          "description": "A CSS color per vertex, interpolated across triangles. Takes precedence over `facecolor` and `color` (not over `intensity`).",
          "valType": "data_array"
        },
        "facecolor": {
          "editType": "calc",
          "description": "A CSS color per triangle. Takes precedence over `color` (not over `intensity`); only used without `vertexcolor`.",
          "valType": "data_array"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale for numeric `intensity` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "cauto": {
          "editType": "style",
          "description": "Compute the color domain from the numeric `intensity` values. Defaults to false when both `cmin` and `cmax` are given.",
          "valType": "boolean"
        },
        "cmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
          "valType": "number"
        },
        "cmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
          "valType": "number"
        },
        "cmid": {
          "editType": "style",
          "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
          "valType": "subplotid"
        },
        "flatshading": {
          "dflt": false,
          "editType": "calc",
          "description": "Flat shading: one normal per triangle (faceted look) instead of normals interpolated across triangles.",
          "valType": "boolean"
        },
        "contour": {
          "editType": "calc",
          "description": "The contour drawn through the hovered point.",
          "role": "object",
          "show": {
            "dflt": false,
            "editType": "calc",
            "description": "While hovering, draw the contour line through the hovered point: the level set of `intensity` (of z without intensity) at its value, as Plotly.",
            "valType": "boolean"
          },
          "color": {
            "dflt": "#444",
            "editType": "calc",
            "description": "Color of the hover contour.",
            "valType": "color"
          },
          "width": {
            "min": 1,
            "max": 16,
            "dflt": 2,
            "editType": "calc",
            "description": "Width of the hover contour, px (Plotly draws 1 px whatever the width).",
            "valType": "number"
          }
        },
        "lighting": {
          "editType": "calc",
          "description": "Plotly's lighting model: coefficients of the ambient, diffuse and specular light. With `scene.lighting`, they scale the scene's lights.",
          "role": "object",
          "ambient": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Ambient light: the share of the color shown whatever the direction of the light.",
            "valType": "number"
          },
          "diffuse": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Diffuse light: the share of the color lit by the light (Lambert).",
            "valType": "number"
          },
          "specular": {
            "min": 0,
            "max": 2,
            "dflt": 0.05,
            "editType": "calc",
            "description": "Specular highlights: the light reflected toward the eye.",
            "valType": "number"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "dflt": 0.5,
            "editType": "calc",
            "description": "Roughness of the surface: the spread of the specular highlights.",
            "valType": "number"
          },
          "fresnel": {
            "min": 0,
            "max": 5,
            "dflt": 0.2,
            "editType": "calc",
            "description": "Fresnel reflection: how much more light surfaces reflect at grazing angles.",
            "valType": "number"
          },
          "vertexnormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 1e-12,
            "editType": "calc",
            "description": "Vertex normals ignore triangle normals shorter than this (tiny triangles do not skew smooth shading).",
            "valType": "number"
          },
          "facenormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 0.000001,
            "editType": "calc",
            "description": "Triangles whose normal is shorter than this get no normal in flat shading (degenerate triangles).",
            "valType": "number"
          }
        },
        "lightposition": {
          "editType": "calc",
          "description": "Position of the light (Plotly's model, without `scene.lighting`), in clip space: it moves with the view.",
          "role": "object",
          "x": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "x of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "y": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "y of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "z": {
            "min": -100000,
            "max": 100000,
            "dflt": 0,
            "editType": "calc",
            "description": "z of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of the surface (Holochart extension). Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of x values in hover labels. Default: the scene's x axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of y values in hover labels. Default: the scene's y axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of z values in hover labels. Default: the scene's z axis format.",
          "valType": "string"
        }
      }
    },
    "scatter3d": {
      "categories": ["gl3d", "symbols", "showLegend"],
      "meta": {
        "description": "Markers, lines and text at x/y/z in a 3D scene, with colorscales, sprite or lit-sphere markers, 3D error bars, wall projections and a surface through the points; one GPU draw call per part whatever the point count.",
        "docsPage": "scatter3d",
        "plotlyEquivalent": "scatter3d"
      },
      "attributes": {
        "editType": "calc",
        "description": "Markers, lines and text at `x`, `y`, `z` in a 3D scene (`layout.scene`), with colorscales, error bars, wall shadows (`projection`) and a surface through the points (`surfaceaxis`).",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "The x coordinates (numbers, dates or categories, per the scene's x axis).",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "The y coordinates (numbers, dates or categories, per the scene's y axis).",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "The z coordinates (numbers, dates or categories, per the scene's z axis).",
          "valType": "data_array"
        },
        "mode": {
          "flags": ["lines", "markers", "text"],
          "extras": ["none"],
          "dflt": "lines+markers",
          "editType": "calc",
          "description": "Drawing mode: any of `'lines'`, `'markers'`, `'text'` joined by `+`, or `'none'`.",
          "valType": "flaglist"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Text per point: the labels of `mode` `text`, and hover text.",
          "valType": "string"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for the text labels, e.g. `'%{y:.2f}'` or `'%{x|%b %d}'` (d3-format / d3-time-format after `:` / `|`). Keys: `x`, `y`, `text`, `customdata`, `marker.size`, `marker.color`, `meta`. Overrides `text`.",
          "valType": "string"
        },
        "textposition": {
          "values": [
            "top left",
            "top center",
            "top right",
            "middle left",
            "middle center",
            "middle right",
            "bottom left",
            "bottom center",
            "bottom right"
          ],
          "dflt": "top center",
          "arrayOk": true,
          "editType": "plot",
          "description": "Position of each text label around its point (and marker), or one per point; the labels face the camera.",
          "valType": "enumerated"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the text labels (`mode` `text`). Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "arrayOk": true,
            "editType": "plot",
            "description": "CSS font family of the text labels, or one per point.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per point.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per point.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight, `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3-format (or d3-time-format on date axes) of the x values in hover labels, overriding the scene axis' `hoverformat`.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3-format (or d3-time-format on date axes) of the y values in hover labels, overriding the scene axis' `hoverformat`.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3-format (or d3-time-format on date axes) of the z values in hover labels, overriding the scene axis' `hoverformat`.",
          "valType": "string"
        },
        "connectgaps": {
          "dflt": false,
          "editType": "plot+crossTraceCalc",
          "description": "Connect lines across missing (`null`, `NaN`) points instead of breaking them.",
          "valType": "boolean"
        },
        "line": {
          "editType": "plot",
          "description": "Line style (`mode` `lines`).",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Line color, or one per point (numbers map through `line.colorscale`; the color is interpolated along each segment). Defaults to the marker color (when a single color) or the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "width": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Line width in CSS px, at every depth (screen-space lines).",
            "valType": "number"
          },
          "dash": {
            "values": ["dash", "dashdot", "dot", "longdash", "longdashdot", "solid"],
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style, measured in CSS px along the drawn line (`render: \"screen\"` only).",
            "valType": "enumerated"
          },
          "render": {
            "values": ["screen", "tube", "ribbon"],
            "dflt": "screen",
            "editType": "calc",
            "description": "How the line is drawn (a Holochart extension): `'screen'` — Plotly's look, a flat band `width` CSS px wide at every depth; `'tube'` — a lit tube of `radius` around the line; `'ribbon'` — a lit strip swept along an axis (`ribbon`), e.g. waterfall plots of spectra. Tubes and ribbons are meshes: they scale with the view like the data, and take `lighting`, `lightposition` and `material`.",
            "valType": "enumerated"
          },
          "radius": {
            "min": 0,
            "dflt": 0.01,
            "editType": "calc",
            "description": "Tube radius (`render: 'tube'`) as a fraction of the longest side of the scene's axis box (so tubes stay round whatever the axis scales).",
            "valType": "number"
          },
          "ribbon": {
            "editType": "calc",
            "description": "The ribbon of `render: 'ribbon'`.",
            "role": "object",
            "axis": {
              "values": ["x", "y", "z"],
              "dflt": "y",
              "editType": "calc",
              "description": "The axis the ribbon extends along (on both sides of the line).",
              "valType": "enumerated"
            },
            "width": {
              "min": 0,
              "editType": "calc",
              "description": "Ribbon width along `axis`, in that axis' units (a category is 1, dates in ms). Default: a twentieth of the axis range.",
              "valType": "number"
            }
          },
          "lighting": {
            "editType": "calc",
            "description": "Plotly's lighting model: coefficients of the ambient, diffuse and specular light. With `scene.lighting`, they scale the scene's lights.",
            "role": "object",
            "ambient": {
              "min": 0,
              "max": 1,
              "dflt": 0.5,
              "editType": "calc",
              "description": "Ambient light: the share of the color shown whatever the direction of the light.",
              "valType": "number"
            },
            "diffuse": {
              "min": 0,
              "max": 1,
              "dflt": 0.7,
              "editType": "calc",
              "description": "Diffuse light: the share of the color lit by the light (Lambert).",
              "valType": "number"
            },
            "specular": {
              "min": 0,
              "max": 2,
              "dflt": 0.15,
              "editType": "calc",
              "description": "Specular highlights: the light reflected toward the eye.",
              "valType": "number"
            },
            "roughness": {
              "min": 0,
              "max": 1,
              "dflt": 0.4,
              "editType": "calc",
              "description": "Roughness of the surface: the spread of the specular highlights.",
              "valType": "number"
            },
            "fresnel": {
              "min": 0,
              "max": 5,
              "dflt": 0.2,
              "editType": "calc",
              "description": "Fresnel reflection: how much more light surfaces reflect at grazing angles.",
              "valType": "number"
            }
          },
          "lightposition": {
            "editType": "calc",
            "description": "Position of the light (Plotly's model, without `scene.lighting`), in clip space: it moves with the view.",
            "role": "object",
            "x": {
              "min": -100000,
              "max": 100000,
              "dflt": 100000,
              "editType": "calc",
              "description": "x of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
              "valType": "number"
            },
            "y": {
              "min": -100000,
              "max": 100000,
              "dflt": 100000,
              "editType": "calc",
              "description": "y of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
              "valType": "number"
            },
            "z": {
              "min": -100000,
              "max": 100000,
              "dflt": 0,
              "editType": "calc",
              "description": "z of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
              "valType": "number"
            }
          },
          "material": {
            "editType": "calc",
            "description": "The material of the surface (Holochart extension). Plotly figures keep the default, `plotly`.",
            "role": "object",
            "type": {
              "values": [
                "plotly",
                "flat",
                "basic",
                "lambert",
                "phong",
                "standard",
                "physical",
                "toon",
                "matcap"
              ],
              "dflt": "plotly",
              "editType": "calc",
              "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
              "valType": "enumerated"
            },
            "roughness": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
              "valType": "number"
            },
            "metalness": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
              "valType": "number"
            },
            "shininess": {
              "min": 0,
              "editType": "calc",
              "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
              "valType": "number"
            },
            "specular": {
              "editType": "calc",
              "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
              "valType": "color"
            },
            "emissive": {
              "editType": "calc",
              "description": "Color the surface emits regardless of the lights. Default black.",
              "valType": "color"
            },
            "emissiveintensity": {
              "min": 0,
              "editType": "calc",
              "description": "Strength of `emissive`. Default 1.",
              "valType": "number"
            },
            "reflectivity": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
              "valType": "number"
            },
            "envmapintensity": {
              "min": 0,
              "editType": "calc",
              "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
              "valType": "number"
            },
            "clearcoat": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "A clear lacquer layer (`physical`). Default 0.",
              "valType": "number"
            },
            "clearcoatroughness": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "Roughness of the clear coat (`physical`). Default 0.",
              "valType": "number"
            },
            "transmission": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
              "valType": "number"
            },
            "ior": {
              "min": 1,
              "max": 2.333,
              "editType": "calc",
              "description": "Index of refraction (`physical`). Default 1.5.",
              "valType": "number"
            },
            "thickness": {
              "min": 0,
              "editType": "calc",
              "description": "Thickness of transmissive volumes, scene units (`physical`).",
              "valType": "number"
            },
            "sheen": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "Velvet-like sheen (`physical`). Default 0.",
              "valType": "number"
            },
            "sheencolor": {
              "editType": "calc",
              "description": "Color of the sheen (`physical`).",
              "valType": "color"
            },
            "sheenroughness": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "Roughness of the sheen (`physical`). Default 1.",
              "valType": "number"
            },
            "iridescence": {
              "min": 0,
              "max": 1,
              "editType": "calc",
              "description": "Thin-film iridescence (`physical`). Default 0.",
              "valType": "number"
            },
            "steps": {
              "min": 2,
              "max": 16,
              "dflt": 3,
              "editType": "calc",
              "description": "Number of shading bands (`toon`).",
              "valType": "integer"
            },
            "matcap": {
              "editType": "calc",
              "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
              "valType": "string"
            },
            "castshadow": {
              "dflt": false,
              "editType": "calc",
              "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
              "valType": "boolean"
            },
            "receiveshadow": {
              "dflt": false,
              "editType": "calc",
              "description": "Receive shadows (three.js material types only).",
              "valType": "boolean"
            }
          }
        },
        "marker": {
          "editType": "plot",
          "description": "Marker style (`mode` `markers`).",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker fill color, one CSS color per point, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "size": {
            "min": 0,
            "dflt": 8,
            "arrayOk": true,
            "editType": "calc",
            "animatable": true,
            "description": "Marker diameter in CSS px, or one value per point (scaled by `sizeref`/`sizemode`).",
            "valType": "number"
          },
          "sizemode": {
            "values": ["diameter", "area"],
            "dflt": "diameter",
            "editType": "calc",
            "description": "How per-point `size` values become px: proportional to the diameter or to the area (bubble charts).",
            "valType": "enumerated"
          },
          "sizeref": {
            "dflt": 1,
            "editType": "calc",
            "description": "Divides per-point `size` values (bubble charts; see `sizemode`).",
            "valType": "number"
          },
          "sizemin": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Minimum radius (px) of markers with per-point `size` values.",
            "valType": "number"
          },
          "symbol": {
            "values": [
              "circle",
              "circle-open",
              "cross",
              "diamond",
              "diamond-open",
              "square",
              "square-open",
              "x"
            ],
            "dflt": "circle",
            "arrayOk": true,
            "editType": "style",
            "description": "Marker symbol (Plotly's 3D set), or one per point.",
            "valType": "enumerated"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "editType": "style",
            "description": "Marker opacity. Translucent markers are sorted back to front as the camera moves.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "Marker outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline color, one per point, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "editType": "style",
              "description": "Width of the marker outline in CSS px.",
              "valType": "number"
            }
          },
          "render": {
            "values": ["sprite", "sphere"],
            "dflt": "sprite",
            "editType": "plot",
            "description": "How markers are drawn (a Holochart extension): `'sprite'` — flat symbols facing the camera, Plotly's look; `'sphere'` — lit, shaded spheres of the same size (every symbol draws as a sphere).",
            "valType": "enumerated"
          }
        },
        "surfaceaxis": {
          "values": [-1, 0, 1, 2],
          "dflt": -1,
          "editType": "calc",
          "description": "Fill a surface through the points, triangulated (Delaunay) in the plane perpendicular to this axis (0: x, 1: y, 2: z); -1 for none.",
          "valType": "enumerated"
        },
        "surfacecolor": {
          "editType": "style",
          "description": "Color of the `surfaceaxis` surface. Defaults to the line or marker color.",
          "valType": "color"
        },
        "projection": {
          "editType": "plot",
          "description": "Shadows of the markers on the scene's walls.",
          "role": "object",
          "x": {
            "editType": "plot",
            "description": "Shadow of the markers on the wall perpendicular to the x axis.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw the points' shadow on the wall perpendicular to the x axis (the far wall, behind the data).",
              "valType": "boolean"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "style",
              "description": "Opacity of the shadow markers (times the markers own opacity).",
              "valType": "number"
            },
            "scale": {
              "min": 0,
              "max": 10,
              "dflt": 0.6666666666666666,
              "editType": "style",
              "description": "Size of the shadow markers relative to the markers.",
              "valType": "number"
            }
          },
          "y": {
            "editType": "plot",
            "description": "Shadow of the markers on the wall perpendicular to the y axis.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw the points' shadow on the wall perpendicular to the y axis (the far wall, behind the data).",
              "valType": "boolean"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "style",
              "description": "Opacity of the shadow markers (times the markers own opacity).",
              "valType": "number"
            },
            "scale": {
              "min": 0,
              "max": 10,
              "dflt": 0.6666666666666666,
              "editType": "style",
              "description": "Size of the shadow markers relative to the markers.",
              "valType": "number"
            }
          },
          "z": {
            "editType": "plot",
            "description": "Shadow of the markers on the wall perpendicular to the z axis.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw the points' shadow on the wall perpendicular to the z axis (the far wall, behind the data).",
              "valType": "boolean"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "style",
              "description": "Opacity of the shadow markers (times the markers own opacity).",
              "valType": "number"
            },
            "scale": {
              "min": 0,
              "max": 10,
              "dflt": 0.6666666666666666,
              "editType": "style",
              "description": "Size of the shadow markers relative to the markers.",
              "valType": "number"
            }
          }
        },
        "error_x": {
          "editType": "calc",
          "description": "Error bars along the x axis, drawn as 3D segments through the points.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive x axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative x axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive x axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative x axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Accepted for Plotly compatibility: 3D error bars are drawn without caps (Plotly draws them with a width of 0 by default).",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          },
          "copy_zstyle": {
            "editType": "style",
            "description": "Use the `error_z` color and thickness. Defaults to true when `error_z` is visible and none of those is set here.",
            "valType": "boolean"
          }
        },
        "error_y": {
          "editType": "calc",
          "description": "Error bars along the y axis, drawn as 3D segments through the points.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive y axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative y axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive y axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative y axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Accepted for Plotly compatibility: 3D error bars are drawn without caps (Plotly draws them with a width of 0 by default).",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          },
          "copy_zstyle": {
            "editType": "style",
            "description": "Use the `error_z` color and thickness. Defaults to true when `error_z` is visible and none of those is set here.",
            "valType": "boolean"
          }
        },
        "error_z": {
          "editType": "calc",
          "description": "Error bars along the z axis, drawn as 3D segments through the points.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive z axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative z axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive z axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative z axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Accepted for Plotly compatibility: 3D error bars are drawn without caps (Plotly draws them with a width of 0 by default).",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          }
        }
      }
    },
    "streamtube": {
      "categories": ["gl3d", "showLegend"],
      "meta": {
        "description": "Stream tubes through a 3D vector field on a grid: streamlines from starting points drawn as lit tubes colored by the vector norm, their radius following the divergence.",
        "docsPage": "streamtube",
        "plotlyEquivalent": "streamtube"
      },
      "attributes": {
        "description": "Stream tubes through a 3D vector field on a grid: streamlines integrated from starting points, drawn as lit tubes colored by the vector norm, with the radius following the divergence.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "u", "v", "w", "norm", "divergence", "text", "name"],
          "extras": ["all", "none", "skip"],
          "dflt": "x+y+z+norm+text+name",
          "editType": "none",
          "description": "Which fields hover labels show: the sample's position (`x`, `y`, `z`), the field's vector there (`u`, `v`, `w`), its `norm`, the `divergence`, `text` and the trace `name`; `'skip'` also turns hover events off.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "X coordinates of the grid nodes (numbers, dates or categories). `x`, `y` and `z` list every node of a rectilinear grid (uniform or not), one axis varying fastest (any order), each axis ascending or descending; other point sets draw nothing, as in Plotly.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Y coordinates of the vector field's grid nodes (numbers, dates or categories), flattened: see `x`.",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Z coordinates of the vector field's grid nodes (numbers, dates or categories), flattened: see `x`.",
          "valType": "data_array"
        },
        "u": {
          "editType": "calc",
          "role": "data",
          "description": "x component of the vector field at each grid node (numbers).",
          "valType": "data_array"
        },
        "v": {
          "editType": "calc",
          "role": "data",
          "description": "y component of the vector field at each grid node (numbers).",
          "valType": "data_array"
        },
        "w": {
          "editType": "calc",
          "role": "data",
          "description": "z component of the vector field at each grid node (numbers).",
          "valType": "data_array"
        },
        "starts": {
          "editType": "calc",
          "description": "Where the tubes start. Default: the x–z plane at the lowest y of the grid, at every x and z node but the first and last.",
          "role": "object",
          "x": {
            "editType": "calc",
            "description": "x coordinates of the tubes' starting positions.",
            "valType": "data_array"
          },
          "y": {
            "editType": "calc",
            "description": "y coordinates of the tubes' starting positions.",
            "valType": "data_array"
          },
          "z": {
            "editType": "calc",
            "description": "z coordinates of the tubes' starting positions.",
            "valType": "data_array"
          }
        },
        "maxdisplayed": {
          "min": 0,
          "dflt": 1000,
          "editType": "calc",
          "description": "The most samples (segments + 1) per tube. Tubes are sampled every 10 / `maxdisplayed` of the field’s diagonal, so this also sets the sampling step.",
          "valType": "integer"
        },
        "sizeref": {
          "min": 0,
          "dflt": 1,
          "editType": "calc",
          "description": "Scale of the tube radii. At the default 1, the tubes of adjacent starts touch where the divergence is largest.",
          "valType": "number"
        },
        "text": {
          "dflt": "",
          "editType": "calc",
          "description": "Text shown in every hover label of the trace (a single string).",
          "valType": "string"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale for numeric `u/v/w norm` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "cauto": {
          "editType": "style",
          "description": "Compute the color domain from the numeric `u/v/w norm` values. Defaults to false when both `cmin` and `cmax` are given.",
          "valType": "boolean"
        },
        "cmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
          "valType": "number"
        },
        "cmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
          "valType": "number"
        },
        "cmid": {
          "editType": "style",
          "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
          "valType": "subplotid"
        },
        "lighting": {
          "editType": "calc",
          "description": "Plotly's lighting model: coefficients of the ambient, diffuse and specular light. With `scene.lighting`, they scale the scene's lights.",
          "role": "object",
          "ambient": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Ambient light: the share of the color shown whatever the direction of the light.",
            "valType": "number"
          },
          "diffuse": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Diffuse light: the share of the color lit by the light (Lambert).",
            "valType": "number"
          },
          "specular": {
            "min": 0,
            "max": 2,
            "dflt": 0.05,
            "editType": "calc",
            "description": "Specular highlights: the light reflected toward the eye.",
            "valType": "number"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "dflt": 0.5,
            "editType": "calc",
            "description": "Roughness of the surface: the spread of the specular highlights.",
            "valType": "number"
          },
          "fresnel": {
            "min": 0,
            "max": 5,
            "dflt": 0.2,
            "editType": "calc",
            "description": "Fresnel reflection: how much more light surfaces reflect at grazing angles.",
            "valType": "number"
          },
          "vertexnormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 1e-12,
            "editType": "calc",
            "description": "Vertex normals ignore triangle normals shorter than this (tiny triangles do not skew smooth shading).",
            "valType": "number"
          },
          "facenormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 0.000001,
            "editType": "calc",
            "description": "Triangles whose normal is shorter than this get no normal in flat shading (degenerate triangles).",
            "valType": "number"
          }
        },
        "lightposition": {
          "editType": "calc",
          "description": "Position of the light (Plotly's model, without `scene.lighting`), in clip space: it moves with the view.",
          "role": "object",
          "x": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "x of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "y": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "y of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "z": {
            "min": -100000,
            "max": 100000,
            "dflt": 0,
            "editType": "calc",
            "description": "z of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of the surface (Holochart extension). Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of x values in hover labels. Default: the scene's x axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of y values in hover labels. Default: the scene's y axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels. Default: the scene's z axis format.",
          "valType": "string"
        },
        "uhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of u values in hover labels. Default: the scene's x axis format.",
          "valType": "string"
        },
        "vhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of v values in hover labels. Default: the scene's y axis format.",
          "valType": "string"
        },
        "whoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of w values in hover labels. Default: the scene's z axis format.",
          "valType": "string"
        }
      }
    },
    "surface": {
      "categories": ["gl3d", "2dMap", "showLegend"],
      "meta": {
        "description": "Surfaces: a grid of heights drawn as a lit 3D surface built on the GPU, with contour lines, projections, a wireframe and a colorbar.",
        "docsPage": "surface",
        "plotlyEquivalent": "surface"
      },
      "attributes": {
        "description": "Surface: a grid of heights drawn as a lit 3D surface, built on the GPU from a height texture, with contour lines, projections and an optional wireframe.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "editType": "style",
          "description": "Hover text per point (a 2D array like `z`, or one string); takes precedence over `text`.",
          "valType": "data_array"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Heights: a 2D array, `z[row][column]` (rows along y, columns along x). Non-numeric entries are gaps (see `connectgaps`).",
          "valType": "data_array"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x coordinates (numbers, dates or categories): one per column of `z`, or a 2D array like `z` (one per point, for grids that are not rectangular in x and y). Default: the column indices.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "y coordinates: one per row of `z`, or a 2D array like `z`. Default: the row indices.",
          "valType": "data_array"
        },
        "surfacecolor": {
          "editType": "calc",
          "role": "data",
          "description": "Values the colorscale colors the surface by, a 2D array like `z`. Default: `z` itself.",
          "valType": "data_array"
        },
        "text": {
          "editType": "calc",
          "description": "Text per point (a 2D array like `z`, or one string): shown in hover labels and as `%{text}`.",
          "valType": "data_array"
        },
        "connectgaps": {
          "dflt": false,
          "editType": "calc",
          "description": "Fill the gaps in `z` by interpolating their neighbours (Plotly's Laplace fill) instead of leaving holes.",
          "valType": "boolean"
        },
        "hidesurface": {
          "dflt": false,
          "editType": "plot",
          "description": "Hide the surface itself, keeping its contour lines and wireframe.",
          "valType": "boolean"
        },
        "opacityscale": {
          "editType": "plot",
          "description": "Opacity by color value, like a colorscale: `[[0, 0.1], [0.5, 1], [1, 0.4]]` (positions 0–1 of the color domain, opacities 0–1), or `'max'` (the highest values opaque, the lowest faded to 0.1), `'min'` (the reverse) or `'extremes'` (both ends opaque, the middle faded).",
          "valType": "any"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale for numeric `z or surfacecolor` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "cauto": {
          "editType": "style",
          "description": "Compute the color domain from the numeric `z or surfacecolor` values. Defaults to false when both `cmin` and `cmax` are given.",
          "valType": "boolean"
        },
        "cmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
          "valType": "number"
        },
        "cmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
          "valType": "number"
        },
        "cmid": {
          "editType": "style",
          "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
          "valType": "subplotid"
        },
        "contours": {
          "editType": "plot",
          "description": "Contour lines of constant x, y and z.",
          "role": "object",
          "x": {
            "editType": "plot",
            "description": "Contour lines of constant x: drawn in the surface's shader (exact at any zoom), and projected onto the walls with `project`.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw contour lines of the `x` coordinates on the surface.",
              "valType": "boolean"
            },
            "start": {
              "editType": "plot",
              "description": "First contour level (with `end` and `size`). Default: the x axis ticks.",
              "valType": "number"
            },
            "end": {
              "editType": "plot",
              "description": "Last contour level (with `start` and `size`). Default: the x axis ticks.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "editType": "plot",
              "description": "Step between contour levels (with `start` and `end`). Default: the x axis ticks.",
              "valType": "number"
            },
            "project": {
              "editType": "plot",
              "description": "Projections of the contour lines (and highlight lines) onto the axis walls.",
              "role": "object",
              "x": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's x wall (the far wall across the x axis, following the camera).",
                "valType": "boolean"
              },
              "y": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's y wall (the far wall across the y axis, following the camera).",
                "valType": "boolean"
              },
              "z": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's z wall (the far wall across the z axis, following the camera).",
                "valType": "boolean"
              }
            },
            "color": {
              "dflt": "#444",
              "editType": "plot",
              "description": "Color of the contour lines.",
              "valType": "color"
            },
            "usecolormap": {
              "dflt": false,
              "editType": "plot",
              "description": "Color the contour lines with the surface's colorscale instead of `color`.",
              "valType": "boolean"
            },
            "width": {
              "min": 1,
              "max": 16,
              "dflt": 2,
              "editType": "plot",
              "description": "Width of the contour lines, px.",
              "valType": "number"
            },
            "highlight": {
              "dflt": true,
              "editType": "plot",
              "description": "Draw the contour line of the hovered point's x value while hovering.",
              "valType": "boolean"
            },
            "highlightcolor": {
              "dflt": "#444",
              "editType": "plot",
              "description": "Color of the highlight line.",
              "valType": "color"
            },
            "highlightwidth": {
              "min": 1,
              "max": 16,
              "dflt": 2,
              "editType": "plot",
              "description": "Width of the highlight line, px.",
              "valType": "number"
            }
          },
          "y": {
            "editType": "plot",
            "description": "Contour lines of constant y: drawn in the surface's shader (exact at any zoom), and projected onto the walls with `project`.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw contour lines of the `y` coordinates on the surface.",
              "valType": "boolean"
            },
            "start": {
              "editType": "plot",
              "description": "First contour level (with `end` and `size`). Default: the y axis ticks.",
              "valType": "number"
            },
            "end": {
              "editType": "plot",
              "description": "Last contour level (with `start` and `size`). Default: the y axis ticks.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "editType": "plot",
              "description": "Step between contour levels (with `start` and `end`). Default: the y axis ticks.",
              "valType": "number"
            },
            "project": {
              "editType": "plot",
              "description": "Projections of the contour lines (and highlight lines) onto the axis walls.",
              "role": "object",
              "x": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's x wall (the far wall across the x axis, following the camera).",
                "valType": "boolean"
              },
              "y": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's y wall (the far wall across the y axis, following the camera).",
                "valType": "boolean"
              },
              "z": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's z wall (the far wall across the z axis, following the camera).",
                "valType": "boolean"
              }
            },
            "color": {
              "dflt": "#444",
              "editType": "plot",
              "description": "Color of the contour lines.",
              "valType": "color"
            },
            "usecolormap": {
              "dflt": false,
              "editType": "plot",
              "description": "Color the contour lines with the surface's colorscale instead of `color`.",
              "valType": "boolean"
            },
            "width": {
              "min": 1,
              "max": 16,
              "dflt": 2,
              "editType": "plot",
              "description": "Width of the contour lines, px.",
              "valType": "number"
            },
            "highlight": {
              "dflt": true,
              "editType": "plot",
              "description": "Draw the contour line of the hovered point's y value while hovering.",
              "valType": "boolean"
            },
            "highlightcolor": {
              "dflt": "#444",
              "editType": "plot",
              "description": "Color of the highlight line.",
              "valType": "color"
            },
            "highlightwidth": {
              "min": 1,
              "max": 16,
              "dflt": 2,
              "editType": "plot",
              "description": "Width of the highlight line, px.",
              "valType": "number"
            }
          },
          "z": {
            "editType": "plot",
            "description": "Contour lines of constant z: drawn in the surface's shader (exact at any zoom), and projected onto the walls with `project`.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw contour lines of the heights (`z`) on the surface.",
              "valType": "boolean"
            },
            "start": {
              "editType": "plot",
              "description": "First contour level (with `end` and `size`). Default: the z axis ticks.",
              "valType": "number"
            },
            "end": {
              "editType": "plot",
              "description": "Last contour level (with `start` and `size`). Default: the z axis ticks.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "editType": "plot",
              "description": "Step between contour levels (with `start` and `end`). Default: the z axis ticks.",
              "valType": "number"
            },
            "project": {
              "editType": "plot",
              "description": "Projections of the contour lines (and highlight lines) onto the axis walls.",
              "role": "object",
              "x": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's x wall (the far wall across the x axis, following the camera).",
                "valType": "boolean"
              },
              "y": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's y wall (the far wall across the y axis, following the camera).",
                "valType": "boolean"
              },
              "z": {
                "dflt": false,
                "editType": "plot",
                "description": "Also draw these contour lines projected onto the scene's z wall (the far wall across the z axis, following the camera).",
                "valType": "boolean"
              }
            },
            "color": {
              "dflt": "#444",
              "editType": "plot",
              "description": "Color of the contour lines.",
              "valType": "color"
            },
            "usecolormap": {
              "dflt": false,
              "editType": "plot",
              "description": "Color the contour lines with the surface's colorscale instead of `color`.",
              "valType": "boolean"
            },
            "width": {
              "min": 1,
              "max": 16,
              "dflt": 2,
              "editType": "plot",
              "description": "Width of the contour lines, px.",
              "valType": "number"
            },
            "highlight": {
              "dflt": true,
              "editType": "plot",
              "description": "Draw the contour line of the hovered point's z value while hovering.",
              "valType": "boolean"
            },
            "highlightcolor": {
              "dflt": "#444",
              "editType": "plot",
              "description": "Color of the highlight line.",
              "valType": "color"
            },
            "highlightwidth": {
              "min": 1,
              "max": 16,
              "dflt": 2,
              "editType": "plot",
              "description": "Width of the highlight line, px.",
              "valType": "number"
            }
          }
        },
        "lighting": {
          "editType": "calc",
          "description": "Plotly's lighting model: coefficients of the ambient, diffuse and specular light. With `scene.lighting`, they scale the scene's lights.",
          "role": "object",
          "ambient": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Ambient light: the share of the color shown whatever the direction of the light.",
            "valType": "number"
          },
          "diffuse": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Diffuse light: the share of the color lit by the light (Lambert).",
            "valType": "number"
          },
          "specular": {
            "min": 0,
            "max": 2,
            "dflt": 0.05,
            "editType": "calc",
            "description": "Specular highlights: the light reflected toward the eye.",
            "valType": "number"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "dflt": 0.5,
            "editType": "calc",
            "description": "Roughness of the surface: the spread of the specular highlights.",
            "valType": "number"
          },
          "fresnel": {
            "min": 0,
            "max": 5,
            "dflt": 0.2,
            "editType": "calc",
            "description": "Fresnel reflection: how much more light surfaces reflect at grazing angles.",
            "valType": "number"
          }
        },
        "lightposition": {
          "editType": "calc",
          "description": "Position of the light (Plotly's model, without `scene.lighting`), in clip space: it moves with the view.",
          "role": "object",
          "x": {
            "min": -100000,
            "max": 100000,
            "dflt": 10,
            "editType": "calc",
            "description": "x of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "y": {
            "min": -100000,
            "max": 100000,
            "dflt": 10000,
            "editType": "calc",
            "description": "y of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "z": {
            "min": -100000,
            "max": 100000,
            "dflt": 0,
            "editType": "calc",
            "description": "z of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of the surface (Holochart extension). Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "wireframe": {
          "editType": "plot",
          "description": "A wireframe over the surface: its grid lines, drawn in the shader (Holochart extension, not in Plotly).",
          "role": "object",
          "show": {
            "dflt": false,
            "editType": "plot",
            "description": "Draw the grid lines of the surface over it (Holochart extension).",
            "valType": "boolean"
          },
          "color": {
            "dflt": "#444",
            "editType": "plot",
            "description": "Color of the grid lines.",
            "valType": "color"
          },
          "width": {
            "min": 0.5,
            "max": 16,
            "dflt": 1,
            "editType": "plot",
            "description": "Width of the grid lines, px.",
            "valType": "number"
          },
          "step": {
            "min": 1,
            "dflt": 1,
            "editType": "plot",
            "description": "Draw every `step`-th grid line (1: every row and column of `z`).",
            "valType": "integer"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of x values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of y values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of z values in hover labels. Default: the axis format.",
          "valType": "string"
        }
      }
    },
    "volume": {
      "categories": ["gl3d", "showLegend"],
      "meta": {
        "description": "A scalar field on a 3D grid drawn as a volume: stacked translucent isosurfaces (as Plotly) or GPU ray marching, colored by value with an opacity scale.",
        "docsPage": "volume",
        "plotlyEquivalent": "volume"
      },
      "attributes": {
        "description": "A scalar field on a 3D grid drawn as a volume: stacked translucent isosurfaces (as Plotly) or GPU ray marching, with an opacity scale, colored by value.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "X coordinate of every grid point (numbers, dates or categories): `x`, `y`, `z` and `value` are flattened columns of a rectilinear grid, one entry per point, the axes nested in any order.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Y coordinate of every grid point (numbers, dates or categories): `x`, `y`, `z` and `value` are flattened columns of a rectilinear grid, one entry per point, the axes nested in any order.",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Z coordinate of every grid point (numbers, dates or categories): `x`, `y`, `z` and `value` are flattened columns of a rectilinear grid, one entry per point, the axes nested in any order.",
          "valType": "data_array"
        },
        "value": {
          "editType": "calc",
          "role": "data",
          "description": "The value at every grid point (numbers): the field whose level surfaces are drawn and which the colorscale maps.",
          "valType": "data_array"
        },
        "isomin": {
          "editType": "calc",
          "description": "Lower end of the value range drawn. Default: the smallest value.",
          "valType": "number"
        },
        "isomax": {
          "editType": "calc",
          "description": "Upper end of the value range drawn. Default: the largest value.",
          "valType": "number"
        },
        "surface": {
          "editType": "calc",
          "description": "The isosurfaces.",
          "role": "object",
          "show": {
            "dflt": true,
            "editType": "calc",
            "description": "Draw the isosurfaces between `isomin` and `isomax`.",
            "valType": "boolean"
          },
          "count": {
            "min": 1,
            "dflt": 2,
            "editType": "calc",
            "description": "Number of isosurfaces, evenly spread from `isomin` to `isomax` (2: just those two; 1: the middle value).",
            "valType": "integer"
          },
          "fill": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "editType": "calc",
            "description": "Share of each surface triangle drawn: below 1 leaves a hole in each triangle (a lattice), 0 hides the surfaces.",
            "valType": "number"
          },
          "pattern": {
            "flags": ["A", "B", "C", "D", "E"],
            "extras": ["all", "odd", "even"],
            "dflt": "all",
            "editType": "calc",
            "description": "Which parts of the surfaces are drawn: every grid cell is cut into five tetrahedra (`A`–`D` at four corners, `E` in the middle); `'all'`, a combination such as `'A+B'`, or `'odd'` / `'even'` (only the cells whose `i + j + k` is odd / even: a checkerboard).",
            "valType": "flaglist"
          }
        },
        "spaceframe": {
          "editType": "calc",
          "description": "The space frame.",
          "role": "object",
          "show": {
            "dflt": false,
            "editType": "calc",
            "description": "Draw the space frame: the faces of the central tetrahedron of every grid cell inside `[isomin, isomax]`, useful with open surfaces or caps.",
            "valType": "boolean"
          },
          "fill": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "editType": "calc",
            "description": "Share of each space-frame triangle drawn (default 1).",
            "valType": "number"
          }
        },
        "slices": {
          "editType": "calc",
          "description": "Slices through the grid.",
          "role": "object",
          "x": {
            "editType": "calc",
            "description": "Slices of constant x.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "calc",
              "description": "Draw slices: planes of constant x through the grid, where the values are in `[isomin, isomax]`.",
              "valType": "boolean"
            },
            "locations": {
              "editType": "calc",
              "description": "x positions of the slices (between grid planes: interpolated). Default: every inner grid plane of x.",
              "valType": "data_array"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each slice triangle drawn: below 1 leaves a hole in each triangle (a lattice), 0 hides the slices.",
              "valType": "number"
            }
          },
          "y": {
            "editType": "calc",
            "description": "Slices of constant y.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "calc",
              "description": "Draw slices: planes of constant y through the grid, where the values are in `[isomin, isomax]`.",
              "valType": "boolean"
            },
            "locations": {
              "editType": "calc",
              "description": "y positions of the slices (between grid planes: interpolated). Default: every inner grid plane of y.",
              "valType": "data_array"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each slice triangle drawn: below 1 leaves a hole in each triangle (a lattice), 0 hides the slices.",
              "valType": "number"
            }
          },
          "z": {
            "editType": "calc",
            "description": "Slices of constant z.",
            "role": "object",
            "show": {
              "dflt": false,
              "editType": "calc",
              "description": "Draw slices: planes of constant z through the grid, where the values are in `[isomin, isomax]`.",
              "valType": "boolean"
            },
            "locations": {
              "editType": "calc",
              "description": "z positions of the slices (between grid planes: interpolated). Default: every inner grid plane of z.",
              "valType": "data_array"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each slice triangle drawn: below 1 leaves a hole in each triangle (a lattice), 0 hides the slices.",
              "valType": "number"
            }
          }
        },
        "caps": {
          "editType": "calc",
          "description": "Caps on the grid's boundary.",
          "role": "object",
          "x": {
            "editType": "calc",
            "description": "The caps at the grid's first and last x.",
            "role": "object",
            "show": {
              "dflt": true,
              "editType": "calc",
              "description": "Draw the caps: the grid's two boundary faces of constant x where the values are in `[isomin, isomax]`, which close the surfaces cut by the grid's edge.",
              "valType": "boolean"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each cap triangle drawn: below 1 leaves a hole in each triangle, 0 hides the caps.",
              "valType": "number"
            }
          },
          "y": {
            "editType": "calc",
            "description": "The caps at the grid's first and last y.",
            "role": "object",
            "show": {
              "dflt": true,
              "editType": "calc",
              "description": "Draw the caps: the grid's two boundary faces of constant y where the values are in `[isomin, isomax]`, which close the surfaces cut by the grid's edge.",
              "valType": "boolean"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each cap triangle drawn: below 1 leaves a hole in each triangle, 0 hides the caps.",
              "valType": "number"
            }
          },
          "z": {
            "editType": "calc",
            "description": "The caps at the grid's first and last z.",
            "role": "object",
            "show": {
              "dflt": true,
              "editType": "calc",
              "description": "Draw the caps: the grid's two boundary faces of constant z where the values are in `[isomin, isomax]`, which close the surfaces cut by the grid's edge.",
              "valType": "boolean"
            },
            "fill": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "Share of each cap triangle drawn: below 1 leaves a hole in each triangle, 0 hides the caps.",
              "valType": "number"
            }
          }
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per grid point, shown in hover labels (after the value) and as `%{text}` in templates.",
          "valType": "string"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale for numeric `value` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "cauto": {
          "editType": "style",
          "description": "Compute the color domain from the numeric `value` values. Defaults to false when both `cmin` and `cmax` are given.",
          "valType": "boolean"
        },
        "cmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
          "valType": "number"
        },
        "cmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
          "valType": "number"
        },
        "cmid": {
          "editType": "style",
          "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
          "valType": "subplotid"
        },
        "flatshading": {
          "dflt": true,
          "editType": "calc",
          "description": "Flat shading: one normal per triangle (the default, as in Plotly: the extracted triangles share no vertices, so smooth shading looks the same).",
          "valType": "boolean"
        },
        "lighting": {
          "editType": "calc",
          "description": "Plotly's lighting model: coefficients of the ambient, diffuse and specular light. With `scene.lighting`, they scale the scene's lights.",
          "role": "object",
          "ambient": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Ambient light: the share of the color shown whatever the direction of the light.",
            "valType": "number"
          },
          "diffuse": {
            "min": 0,
            "max": 1,
            "dflt": 0.8,
            "editType": "calc",
            "description": "Diffuse light: the share of the color lit by the light (Lambert).",
            "valType": "number"
          },
          "specular": {
            "min": 0,
            "max": 2,
            "dflt": 0.05,
            "editType": "calc",
            "description": "Specular highlights: the light reflected toward the eye.",
            "valType": "number"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "dflt": 0.5,
            "editType": "calc",
            "description": "Roughness of the surface: the spread of the specular highlights.",
            "valType": "number"
          },
          "fresnel": {
            "min": 0,
            "max": 5,
            "dflt": 0.2,
            "editType": "calc",
            "description": "Fresnel reflection: how much more light surfaces reflect at grazing angles.",
            "valType": "number"
          },
          "vertexnormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 1e-12,
            "editType": "calc",
            "description": "Vertex normals ignore triangle normals shorter than this (tiny triangles do not skew smooth shading).",
            "valType": "number"
          },
          "facenormalsepsilon": {
            "min": 0,
            "max": 1,
            "dflt": 0,
            "editType": "calc",
            "description": "Triangles whose normal is shorter than this get no normal in flat shading (degenerate triangles).",
            "valType": "number"
          }
        },
        "lightposition": {
          "editType": "calc",
          "description": "Position of the light (Plotly's model, without `scene.lighting`), in clip space: it moves with the view.",
          "role": "object",
          "x": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "x of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "y": {
            "min": -100000,
            "max": 100000,
            "dflt": 100000,
            "editType": "calc",
            "description": "y of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          },
          "z": {
            "min": -100000,
            "max": 100000,
            "dflt": 0,
            "editType": "calc",
            "description": "z of the light, in clip space (moves with the view; ±1 is the edge of the view, 1e5 far away).",
            "valType": "number"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of the surface (Holochart extension). Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of x values in hover labels. Default: the scene's x axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of y values in hover labels. Default: the scene's y axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels. Default: the scene's z axis format.",
          "valType": "string"
        },
        "valuehoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of value values in hover labels. Default: the value with hover precision.",
          "valType": "string"
        },
        "opacityscale": {
          "editType": "calc",
          "description": "Opacity by value, like a colorscale: `[[0, 0.1], [0.5, 1], [1, 0.4]]` (positions 0–1 of the color domain, opacities 0–1), or `'max'` (the highest values opaque, the lowest faded to 0.1), `'min'` (the reverse), `'extremes'` (both ends opaque, the middle faded) or `'uniform'` (the default: `opacity` everywhere). Multiplies `opacity`.",
          "valType": "any"
        },
        "render": {
          "values": ["isosurfaces", "raymarch"],
          "dflt": "isosurfaces",
          "editType": "calc",
          "description": "How the volume is drawn (Holochart extension). `'isosurfaces'`: Plotly's stacked translucent isosurfaces (`surface.count` of them), with caps, slices and the space frame. `'raymarch'`: GPU ray marching through the grid (a 3D texture), every value in `[isomin, isomax]` drawn with the colorscale and `opacity` · `opacityscale` (the opacity of one grid cell's thickness); `surface`, `caps`, `slices` and `spaceframe` don't apply.",
          "valType": "enumerated"
        },
        "raymarch": {
          "editType": "plot",
          "description": "Ray-marching options (`render: 'raymarch'`).",
          "role": "object",
          "step": {
            "min": 0.05,
            "max": 4,
            "dflt": 0.5,
            "editType": "plot",
            "description": "Sample spacing along the rays, in grid cells: smaller is finer and slower (the opacity per cell stays the same).",
            "valType": "number"
          },
          "shading": {
            "dflt": false,
            "editType": "plot",
            "description": "Shade by the value gradient: a light at the camera, with the trace's `lighting.ambient` and `lighting.diffuse` (six more samples per step).",
            "valType": "boolean"
          }
        }
      }
    },
    "bar": {
      "categories": ["cartesian", "bar-like", "showLegend", "errorBarsOK"],
      "meta": {
        "description": "Bars from a base to a value, vertical or horizontal, grouped, stacked or overlaid (`layout.barmode`), drawn as one instanced GPU rect set with batched SDF labels.",
        "docsPage": "bar",
        "plotlyEquivalent": "bar"
      },
      "attributes": {
        "description": "Bar: rectangles from a base to a value, vertical or horizontal.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x coordinates: bar positions for vertical bars, bar lengths otherwise. Numbers, dates or category names depending on the axis type.",
          "valType": "data_array"
        },
        "x0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting x coordinate when `x` is not given: bar `i` is at `x0 + i·dx`.",
          "valType": "any"
        },
        "dx": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between implicit x coordinates (see `x0`).",
          "valType": "number"
        },
        "xperiod": {
          "editType": "calc",
          "description": "Only on date or linear x axes: snap each x value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `xperiodalignment`.",
          "valType": "any"
        },
        "xperiod0": {
          "editType": "calc",
          "description": "A period boundary for `xperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "xperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `xperiod`.",
          "valType": "enumerated"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "y coordinates: bar positions for horizontal bars, bar lengths otherwise. Numbers, dates or category names depending on the axis type.",
          "valType": "data_array"
        },
        "y0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting y coordinate when `y` is not given: bar `i` is at `y0 + i·dy`.",
          "valType": "any"
        },
        "dy": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between implicit y coordinates (see `y0`).",
          "valType": "number"
        },
        "yperiod": {
          "editType": "calc",
          "description": "Only on date or linear y axes: snap each y value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `yperiodalignment`.",
          "valType": "any"
        },
        "yperiod0": {
          "editType": "calc",
          "description": "A period boundary for `yperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "yperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `yperiod`.",
          "valType": "enumerated"
        },
        "orientation": {
          "values": ["v", "h"],
          "editType": "calc",
          "description": "`'v'`: vertical bars at `x` positions with `y` lengths; `'h'`: horizontal bars at `y` positions with `x` lengths. Defaults to `'h'` when only `x` is given.",
          "valType": "enumerated"
        },
        "base": {
          "arrayOk": true,
          "editType": "calc",
          "description": "Where bars start on the length axis (default 0), one value or one per bar, in that axis' data units. On a date axis the base is a date (a date string, a `Date` or ms since the epoch) and the lengths are durations in ms, so a bar spans `base` to `base + length` (Gantt charts); hover then reports the end, `base + length`. Set the axis `type: 'date'` explicitly: numeric lengths alone make it linear. On log axes, bars without a positive base start below the visible range.",
          "valType": "any"
        },
        "width": {
          "min": 0,
          "arrayOk": true,
          "editType": "calc",
          "description": "Bar width in position-axis units (category slots, or ms on date axes: `86400000` is one day), one value or one per bar. Default: the slot left by `layout.bargap` and the bar mode.",
          "valType": "number"
        },
        "offset": {
          "arrayOk": true,
          "editType": "calc",
          "description": "Shift of the bar's leading edge from its position, in position-axis units, one value or one per bar. Default: centered in its (group) slot.",
          "valType": "number"
        },
        "offsetgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces with the same offset group share one slot in `group` mode (and stack together in `stack`/`relative` modes); bars at the same position line up, also across subplots on the same position axis.",
          "valType": "string"
        },
        "alignmentgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces on the same position axis with the same alignment group split each position between their offset groups; different alignment groups lay out independently.",
          "valType": "string"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per bar, drawn per `textposition` and shown in hover labels.",
          "valType": "string"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Template for bar labels, overriding `text`: `%{value}` (bar length), `%{label}` (position), `%{x}`, `%{y}`, `%{text}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{value:.1f}`) or date formats (`%{x|%b %Y}`).",
          "valType": "string"
        },
        "textposition": {
          "values": ["inside", "outside", "auto", "none"],
          "dflt": "auto",
          "arrayOk": true,
          "editType": "calc",
          "description": "Where bar labels go: `inside` (against the bar end, see `insidetextanchor`), `outside` (past the bar end; inner bars of a stack stay inside), `auto` (inside when it fits, else outside), `none`.",
          "valType": "enumerated"
        },
        "insidetextanchor": {
          "values": ["end", "middle", "start"],
          "dflt": "end",
          "editType": "plot",
          "description": "Where inside labels sit along the bar.",
          "valType": "enumerated"
        },
        "textangle": {
          "dflt": "auto",
          "extras": ["auto"],
          "editType": "plot",
          "description": "Label rotation in degrees, clockwise. `'auto'` turns inside labels 90° when that fits the bar better.",
          "valType": "angle"
        },
        "textfont": {
          "editType": "calc",
          "description": "Font of bar labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextfont": {
          "editType": "calc",
          "description": "Font of labels inside bars. Defaults to `textfont`, with a color contrasting the bar fill.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "outsidetextfont": {
          "editType": "calc",
          "description": "Font of labels outside bars. Defaults to `textfont`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "constraintext": {
          "values": ["inside", "outside", "both", "none"],
          "dflt": "both",
          "editType": "calc",
          "description": "Shrink labels (inside, outside, or both) so they are no larger than their bar.",
          "valType": "enumerated"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, bars draw below scatter traces (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "cliponaxis": {
          "dflt": true,
          "editType": "plot",
          "description": "Clip labels to the plot area. `false` is not drawn yet: labels are always clipped to the subplot.",
          "valType": "boolean"
        },
        "marker": {
          "editType": "calc",
          "description": "Bar style.",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Bar fill color, one per bar, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Bar opacity (multiplied by the trace `opacity`), or one per bar.",
            "valType": "number"
          },
          "cornerradius": {
            "editType": "style",
            "description": "Corner radius in CSS px, or a percentage of the bar width (`'30%'`). Default: `layout.barcornerradius`. In stacks only the outermost bar is rounded.",
            "valType": "any"
          },
          "line": {
            "editType": "style",
            "description": "Bar outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Bar outline color, one per bar, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Bar outline width in CSS px (centered on the edge), or one per bar.",
              "valType": "number"
            }
          },
          "pattern": {
            "editType": "style",
            "description": "Hatch pattern of the bar fill (drawn in screen px, for print and grayscale).",
            "role": "object",
            "shape": {
              "values": ["", "/", "\\", "x", "-", "|", "+", "."],
              "dflt": "",
              "arrayOk": true,
              "editType": "style",
              "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none, or one per bar.",
              "valType": "enumerated"
            },
            "fillmode": {
              "values": ["replace", "overlay"],
              "dflt": "replace",
              "editType": "style",
              "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
              "valType": "enumerated"
            },
            "bgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent, or one per bar.",
              "valType": "color"
            },
            "fgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`, or one per bar.",
              "valType": "color"
            },
            "fgopacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "arrayOk": true,
              "editType": "style",
              "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots, or one per bar.",
              "valType": "number"
            },
            "solidity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "arrayOk": true,
              "editType": "style",
              "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color, or one per bar.",
              "valType": "number"
            }
          }
        },
        "error_x": {
          "editType": "calc",
          "description": "Error bars along the x axis.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive x axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative x axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive x axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative x axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Half-length of the cross-bar at each end, in CSS px (default 4). 0 hides the caps.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          },
          "copy_ystyle": {
            "editType": "style",
            "description": "Use the `error_y` color, thickness and width. Defaults to true when `error_y` is visible and none of those is set here.",
            "valType": "boolean"
          }
        },
        "error_y": {
          "editType": "calc",
          "description": "Error bars along the y axis.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive y axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative y axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive y axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative y axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Half-length of the cross-bar at each end, in CSS px (default 4). 0 hides the caps.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          }
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected bars while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of selected bars.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of selected bars.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of selected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of selected bars.",
              "valType": "color"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected bars while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of unselected bars.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of unselected bars. Default: 0.2 × the bar opacity.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of unselected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of unselected bars.",
              "valType": "color"
            }
          }
        },
        "depth": {
          "dflt": 0,
          "editType": "plot",
          "description": "Extrusion toward the viewer (Holochart extension, 2.5D): CSS px, a percentage of each shape's width (`'60%'`), or one number per item. 0 (default) draws the trace flat. Seen in perspective with `layout.view3d`; in the flat view extruded shapes are lit from the front.",
          "valType": "any"
        },
        "bevel": {
          "editType": "plot",
          "description": "Rounded edges of extruded shapes (with `depth`).",
          "role": "object",
          "size": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Radius of the rounded front and side edges, CSS px (at most half the size).",
            "valType": "number"
          },
          "segments": {
            "min": 1,
            "max": 16,
            "dflt": 3,
            "editType": "plot",
            "description": "Segments of each rounded edge.",
            "valType": "integer"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of extruded shapes (with `depth`): Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        }
      }
    },
    "pie": {
      "categories": ["domain", "pie-like", "pie", "showLegend"],
      "meta": {
        "description": "Pie and donut charts: slices proportional to their values, placed by `domain`, drawn as one instanced GPU arc set with batched SDF labels and leader lines.",
        "docsPage": "pie",
        "plotlyEquivalent": "pie"
      },
      "attributes": {
        "description": "Pie or donut: slices of a circle proportional to their values.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["label", "text", "value", "percent", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show, in a fixed order; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "labels": {
          "editType": "calc",
          "role": "data",
          "description": "Slice labels. Slices with the same label are merged: their `values` are summed (or occurrences counted without `values`), and other per-slice attributes use the first non-empty entry.",
          "valType": "data_array"
        },
        "label0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Without `labels`: numeric labels `label0 + i·dlabel` (only used when `values` is set).",
          "valType": "number"
        },
        "dlabel": {
          "dflt": 1,
          "editType": "calc",
          "description": "Label step, see `label0`.",
          "valType": "number"
        },
        "values": {
          "editType": "calc",
          "role": "data",
          "description": "Slice values. Non-numeric entries are skipped; merged slices whose total is negative are dropped. Without `values` every label counts 1.",
          "valType": "data_array"
        },
        "marker": {
          "editType": "calc",
          "description": "Slice style.",
          "role": "object",
          "colors": {
            "editType": "calc",
            "description": "Slice colors, one per data point. Unset slices take `layout.piecolorway` colors, shared by label across all pies of the figure.",
            "valType": "data_array"
          },
          "line": {
            "editType": "calc",
            "description": "Slice outlines.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "arrayOk": true,
              "editType": "style",
              "description": "Slice outline color, or one per slice.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Slice outline width in CSS px (centered on the edge), or one per slice.",
              "valType": "number"
            }
          },
          "pattern": {
            "editType": "style",
            "description": "Hatch pattern of the slice fill (drawn in screen px, for print and grayscale).",
            "role": "object",
            "shape": {
              "values": ["", "/", "\\", "x", "-", "|", "+", "."],
              "dflt": "",
              "arrayOk": true,
              "editType": "style",
              "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none, or one per slice.",
              "valType": "enumerated"
            },
            "fillmode": {
              "values": ["replace", "overlay"],
              "dflt": "replace",
              "editType": "style",
              "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
              "valType": "enumerated"
            },
            "bgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent, or one per slice.",
              "valType": "color"
            },
            "fgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`, or one per slice.",
              "valType": "color"
            },
            "fgopacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "arrayOk": true,
              "editType": "style",
              "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots, or one per slice.",
              "valType": "number"
            },
            "solidity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "arrayOk": true,
              "editType": "style",
              "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color, or one per slice.",
              "valType": "number"
            }
          }
        },
        "text": {
          "editType": "plot",
          "description": "Text per slice, shown on the slice with the `text` flag of `textinfo`, and in hover labels unless `hovertext` is set.",
          "valType": "data_array"
        },
        "scalegroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Pies with the same non-empty scale group are sized by their totals: their areas are proportional to the sums of their values.",
          "valType": "string"
        },
        "textinfo": {
          "flags": ["label", "text", "value", "percent"],
          "extras": ["none"],
          "editType": "calc",
          "description": "What slice labels show, in a fixed order (label, text, value, percent), one per line. Default `'percent'`, or `'text+percent'` when `text` is an array. Use `texttemplate` for other layouts.",
          "valType": "flaglist"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for slice labels, overriding `textinfo`: `%{label}`, `%{value}`, `%{percent}`, `%{text}`, `%{color}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{percent:.1%}`). Without a format, `value` and `percent` are formatted like `textinfo`.",
          "valType": "string"
        },
        "textposition": {
          "values": ["inside", "outside", "auto", "none"],
          "dflt": "auto",
          "arrayOk": true,
          "editType": "plot",
          "description": "Where slice labels go: `inside` (shrunk to fit), `outside` (next to the slice, moved apart to avoid overlaps, with leader lines when moved), `auto` (inside when it fits unshrunk, else outside), `none`.",
          "valType": "enumerated"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of slice labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per slice.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per slice.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextorientation": {
          "values": ["horizontal", "radial", "tangential", "auto"],
          "dflt": "auto",
          "editType": "plot",
          "description": "Orientation of inside labels: `horizontal`, `radial` (along the radius), `tangential` (across it), or `auto` (whichever is largest).",
          "valType": "enumerated"
        },
        "insidetextfont": {
          "editType": "plot",
          "description": "Font of labels inside slices. Defaults to `textfont`, with a color contrasting the slice.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per slice.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per slice.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "outsidetextfont": {
          "editType": "plot",
          "description": "Font of labels outside slices. Defaults to `textfont`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per slice.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per slice.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "title": {
          "editType": "plot",
          "description": "The pie title.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "plot",
            "description": "Title of the pie. Empty: no title.",
            "valType": "string"
          },
          "font": {
            "editType": "plot",
            "description": "Title font. Defaults to `layout.font`.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "plot",
              "description": "CSS font-family list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "plot",
              "description": "Font size in CSS px, or one per slice.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Text color, or one per slice.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "plot",
              "description": "Font style.",
              "valType": "enumerated"
            }
          },
          "position": {
            "values": [
              "top left",
              "top center",
              "top right",
              "middle center",
              "bottom left",
              "bottom center",
              "bottom right"
            ],
            "editType": "plot",
            "description": "Where the title goes. Default `'middle center'` (inside the hole) for donuts, else `'top center'`; `'middle center'` needs a `hole`.",
            "valType": "enumerated"
          }
        },
        "hole": {
          "min": 0,
          "max": 1,
          "dflt": 0,
          "editType": "calc",
          "description": "Fraction of the radius cut out of the middle: a donut chart when > 0.",
          "valType": "number"
        },
        "sort": {
          "dflt": true,
          "editType": "calc",
          "description": "Order slices from largest to smallest.",
          "valType": "boolean"
        },
        "direction": {
          "values": ["clockwise", "counterclockwise"],
          "dflt": "counterclockwise",
          "editType": "calc",
          "description": "Direction in which slices follow each other. The first slice always has an edge at the starting angle (12 o'clock for `rotation: 0`).",
          "valType": "enumerated"
        },
        "rotation": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting angle in degrees, clockwise from 12 o'clock.",
          "valType": "angle"
        },
        "pull": {
          "min": 0,
          "max": 1,
          "dflt": 0,
          "arrayOk": true,
          "editType": "calc",
          "description": "Fraction of the radius slices are pulled out from the center, one value for all slices or one per slice.",
          "valType": "number"
        },
        "depth": {
          "dflt": 0,
          "editType": "plot",
          "description": "Extrusion toward the viewer (Holochart extension, 2.5D): CSS px, a percentage of each shape's width (`'60%'`), or one number per item. 0 (default) draws the trace flat. Seen in perspective with `layout.view3d`; in the flat view extruded shapes are lit from the front.",
          "valType": "any"
        },
        "bevel": {
          "editType": "plot",
          "description": "Rounded edges of extruded shapes (with `depth`).",
          "role": "object",
          "size": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Radius of the rounded front and side edges, CSS px (at most half the size).",
            "valType": "number"
          },
          "segments": {
            "min": 1,
            "max": 16,
            "dflt": 3,
            "editType": "plot",
            "description": "Segments of each rounded edge.",
            "valType": "integer"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of extruded shapes (with `depth`): Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "tilt": {
          "min": -80,
          "max": 80,
          "dflt": 0,
          "editType": "plot",
          "animatable": true,
          "description": "Tilt of the trace in 2.5D (Holochart extension), degrees: positive looks from above, 0 (default) is the flat view. With `depth`, slices and tiles show their sides.",
          "valType": "number"
        },
        "perspective": {
          "min": 0,
          "max": 1,
          "dflt": 0.5,
          "editType": "plot",
          "animatable": true,
          "description": "Strength of the perspective of a tilted or extruded trace: 0 is a parallel projection, 1 a strong one.",
          "valType": "number"
        }
      }
    },
    "scatter": {
      "categories": ["cartesian", "symbols", "showLegend", "errorBarsOK"],
      "meta": {
        "description": "Markers, lines (linear, spline, steps), text labels, filled and stacked areas and bubbles at x/y positions, with error bars and colorscales; every part is one GPU draw call regardless of the point count.",
        "docsPage": "scatter",
        "plotlyEquivalent": "scatter / scattergl"
      },
      "attributes": {
        "description": "Scatter: markers, lines, text labels and filled or stacked areas at x/y positions.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x coordinates: numbers, dates or category names depending on the axis type.",
          "valType": "data_array"
        },
        "x0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting x coordinate when `x` is not given: point `i` is at `x0 + i·dx`.",
          "valType": "any"
        },
        "dx": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between implicit x coordinates (see `x0`).",
          "valType": "number"
        },
        "xperiod": {
          "editType": "calc",
          "description": "Only on date or linear x axes: snap each x value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `xperiodalignment`.",
          "valType": "any"
        },
        "xperiod0": {
          "editType": "calc",
          "description": "A period boundary for `xperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "xperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `xperiod`.",
          "valType": "enumerated"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "y coordinates: numbers, dates or category names depending on the axis type.",
          "valType": "data_array"
        },
        "y0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting y coordinate when `y` is not given: point `i` is at `y0 + i·dy`.",
          "valType": "any"
        },
        "dy": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between implicit y coordinates (see `y0`).",
          "valType": "number"
        },
        "yperiod": {
          "editType": "calc",
          "description": "Only on date or linear y axes: snap each y value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `yperiodalignment`.",
          "valType": "any"
        },
        "yperiod0": {
          "editType": "calc",
          "description": "A period boundary for `yperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "yperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `yperiod`.",
          "valType": "enumerated"
        },
        "mode": {
          "flags": ["lines", "markers", "text"],
          "extras": ["none"],
          "editType": "calc",
          "description": "Drawing mode. Defaults to `'lines+markers'` below 20 points, else `'lines'` (Plotly rule).",
          "valType": "flaglist"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Text per point: the labels of `mode` `text`, and hover text.",
          "valType": "string"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for the text labels, e.g. `'%{y:.2f}'` or `'%{x|%b %d}'` (d3-format / d3-time-format after `:` / `|`). Keys: `x`, `y`, `text`, `customdata`, `marker.size`, `marker.color`, `meta`. Overrides `text`.",
          "valType": "string"
        },
        "textposition": {
          "values": [
            "top left",
            "top center",
            "top right",
            "middle left",
            "middle center",
            "middle right",
            "bottom left",
            "bottom center",
            "bottom right"
          ],
          "dflt": "middle center",
          "arrayOk": true,
          "editType": "plot",
          "description": "Where text labels sit relative to their point (and marker), or one per point.",
          "valType": "enumerated"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the text labels (`mode` `text`). Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "arrayOk": true,
            "editType": "plot",
            "description": "CSS font family of the text labels, or one per point.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per point.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per point.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight, `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "line": {
          "editType": "plot",
          "description": "Line style (`mode` `lines`). `shape` and `smoothing` also shape fills.",
          "role": "object",
          "color": {
            "editType": "style",
            "description": "Line color. Defaults to the marker color (when a single color) or the colorway.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Line width in CSS px.",
            "valType": "number"
          },
          "dash": {
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
            "valType": "string"
          },
          "shape": {
            "values": ["linear", "spline", "hv", "vh", "hvh", "vhv"],
            "dflt": "linear",
            "editType": "plot+crossTraceCalc",
            "description": "Interpolation between points: straight, `'spline'` (centripetal Catmull-Rom, see `smoothing`), or steps (`'hv'`: horizontal then vertical, …).",
            "valType": "enumerated"
          },
          "smoothing": {
            "min": 0,
            "max": 1.3,
            "dflt": 1,
            "editType": "plot+crossTraceCalc",
            "description": "Spline tension for `shape: 'spline'`: 0 is straight, 1.3 the smoothest.",
            "valType": "number"
          },
          "simplify": {
            "dflt": true,
            "editType": "plot",
            "description": "Decimate dense monotonic lines to at most 4 vertices per pixel column (min/max, visually lossless). Recomputed when zooming changes the scale.",
            "valType": "boolean"
          }
        },
        "connectgaps": {
          "dflt": false,
          "editType": "plot+crossTraceCalc",
          "description": "Connect lines across missing (`null`, `NaN`) points instead of breaking them.",
          "valType": "boolean"
        },
        "fill": {
          "values": ["none", "tozeroy", "tozerox", "tonexty", "tonextx", "toself", "tonext"],
          "dflt": "none",
          "editType": "calc",
          "description": "Area to fill with `fillcolor`. Default `'none'`, or `'tonexty'` (`'tonextx'` for `orientation: 'h'`) in a `stackgroup`. `'tozeroy'` / `'tozerox'` fill to y = 0 / x = 0; `'tonexty'` / `'tonextx'` fill to the previous trace on the subplot (in the same `stackgroup`), joining the end points with straight lines, and act like `'tozero…'` without one; `'toself'` closes the line (each segment when it has gaps) into a shape; `'tonext'` fills between this trace and the previous one when one encloses the other (like `'toself'` without one). Fills follow `line.shape`.",
          "valType": "enumerated"
        },
        "fillcolor": {
          "editType": "style",
          "description": "Fill color. Default: the line color (else the marker color, else the colorway color) at half opacity.",
          "valType": "color"
        },
        "fillgradient": {
          "editType": "plot",
          "description": "A color gradient drawn instead of `fillcolor` (which still colors hover labels).",
          "role": "object",
          "type": {
            "values": ["radial", "horizontal", "vertical", "none"],
            "dflt": "none",
            "editType": "plot",
            "description": "Gradient direction: along x (`'horizontal'`), along y (`'vertical'`), or outwards from the center of the fill's bounding box (`'radial'`).",
            "valType": "enumerated"
          },
          "start": {
            "editType": "plot",
            "description": "Where the gradient starts (colorscale position 0), as a value on the axis of the gradient direction. Default: the lowest value of the fill along that axis. Ignored for `radial`.",
            "valType": "number"
          },
          "stop": {
            "editType": "plot",
            "description": "Where the gradient ends (colorscale position 1), as a value on the axis of the gradient direction. Default: the highest value of the fill along that axis. Ignored for `radial`.",
            "valType": "number"
          },
          "colorscale": {
            "editType": "style",
            "description": "Gradient colors: a colorscale from the lowest to the highest value along the gradient direction, or from the center outwards for `radial`.",
            "valType": "colorscale"
          }
        },
        "fillpattern": {
          "editType": "style",
          "description": "Hatch pattern of the area fill (drawn in screen px, for print and grayscale).",
          "role": "object",
          "shape": {
            "values": ["", "/", "\\", "x", "-", "|", "+", "."],
            "dflt": "",
            "arrayOk": false,
            "editType": "style",
            "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none.",
            "valType": "enumerated"
          },
          "fillmode": {
            "values": ["replace", "overlay"],
            "dflt": "replace",
            "editType": "style",
            "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
            "valType": "enumerated"
          },
          "bgcolor": {
            "arrayOk": false,
            "editType": "style",
            "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent.",
            "valType": "color"
          },
          "fgcolor": {
            "arrayOk": false,
            "editType": "style",
            "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`.",
            "valType": "color"
          },
          "fgopacity": {
            "min": 0,
            "max": 1,
            "editType": "style",
            "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
            "valType": "number"
          },
          "size": {
            "min": 0,
            "dflt": 8,
            "arrayOk": false,
            "editType": "style",
            "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots.",
            "valType": "number"
          },
          "solidity": {
            "min": 0,
            "max": 1,
            "dflt": 0.3,
            "arrayOk": false,
            "editType": "style",
            "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color.",
            "valType": "number"
          }
        },
        "stackgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Stack this trace on the previous traces of the same group on its subplot: their y values add up (x values for `orientation: 'h'`). Stacking turns `fill` on (`'tonexty'` / `'tonextx'`) and makes `mode` default to `'lines'`. Only numeric (linear or log) value axes stack.",
          "valType": "string"
        },
        "orientation": {
          "values": ["v", "h"],
          "editType": "calc",
          "description": "Stacking direction in a `stackgroup`: `'v'` adds y values, `'h'` x values. The first trace of the group that sets it decides; default `'h'` when only `x` is given, else `'v'`.",
          "valType": "enumerated"
        },
        "groupnorm": {
          "values": ["", "fraction", "percent"],
          "dflt": "",
          "editType": "calc",
          "description": "Normalize each position's `stackgroup` total to 1 (`'fraction'`) or 100 (`'percent'`). The first trace of the group that sets it decides.",
          "valType": "enumerated"
        },
        "stackgaps": {
          "values": ["infer zero", "interpolate"],
          "dflt": "infer zero",
          "editType": "calc",
          "description": "What a `stackgroup` trace contributes where other traces of the group have a position it lacks (or where its value is missing): zero, or a value interpolated linearly between its neighbors (constant beyond its ends). The first trace of the group that sets it decides.",
          "valType": "enumerated"
        },
        "hoveron": {
          "flags": ["points", "fills"],
          "editType": "style",
          "description": "What hover reacts to: points (markers, line vertices) and/or the filled area, which reports the trace. Default `'fills'` for `'toself'` / `'tonext'` fills without markers or text, else `'points'`. Fills hover (in every hovermode) only when no point is under the pointer.",
          "valType": "flaglist"
        },
        "marker": {
          "editType": "calc",
          "description": "Marker style (`mode` `markers`).",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker fill color, one CSS color per point, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "size": {
            "min": 0,
            "dflt": 6,
            "arrayOk": true,
            "editType": "calc",
            "animatable": true,
            "description": "Marker diameter in CSS px, or one value per point (scaled by `sizeref`/`sizemode`).",
            "valType": "number"
          },
          "sizemode": {
            "values": ["diameter", "area"],
            "dflt": "diameter",
            "editType": "calc",
            "description": "How per-point `size` values become px: proportional to the diameter or to the area (bubble charts).",
            "valType": "enumerated"
          },
          "sizeref": {
            "dflt": 1,
            "editType": "calc",
            "description": "Divides per-point `size` values (bubble charts; see `sizemode`).",
            "valType": "number"
          },
          "sizemin": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Minimum radius (px) of markers with per-point `size` values.",
            "valType": "number"
          },
          "symbol": {
            "values": [
              "circle",
              0,
              "0",
              "circle-open",
              100,
              "100",
              "circle-dot",
              200,
              "200",
              "circle-open-dot",
              300,
              "300",
              "square",
              1,
              "1",
              "square-open",
              101,
              "101",
              "square-dot",
              201,
              "201",
              "square-open-dot",
              301,
              "301",
              "diamond",
              2,
              "2",
              "diamond-open",
              102,
              "102",
              "diamond-dot",
              202,
              "202",
              "diamond-open-dot",
              302,
              "302",
              "cross",
              3,
              "3",
              "cross-open",
              103,
              "103",
              "cross-dot",
              203,
              "203",
              "cross-open-dot",
              303,
              "303",
              "x",
              4,
              "4",
              "x-open",
              104,
              "104",
              "x-dot",
              204,
              "204",
              "x-open-dot",
              304,
              "304",
              "triangle-up",
              5,
              "5",
              "triangle-up-open",
              105,
              "105",
              "triangle-up-dot",
              205,
              "205",
              "triangle-up-open-dot",
              305,
              "305",
              "triangle-down",
              6,
              "6",
              "triangle-down-open",
              106,
              "106",
              "triangle-down-dot",
              206,
              "206",
              "triangle-down-open-dot",
              306,
              "306",
              "triangle-left",
              7,
              "7",
              "triangle-left-open",
              107,
              "107",
              "triangle-left-dot",
              207,
              "207",
              "triangle-left-open-dot",
              307,
              "307",
              "triangle-right",
              8,
              "8",
              "triangle-right-open",
              108,
              "108",
              "triangle-right-dot",
              208,
              "208",
              "triangle-right-open-dot",
              308,
              "308",
              "triangle-ne",
              9,
              "9",
              "triangle-ne-open",
              109,
              "109",
              "triangle-ne-dot",
              209,
              "209",
              "triangle-ne-open-dot",
              309,
              "309",
              "triangle-se",
              10,
              "10",
              "triangle-se-open",
              110,
              "110",
              "triangle-se-dot",
              210,
              "210",
              "triangle-se-open-dot",
              310,
              "310",
              "triangle-sw",
              11,
              "11",
              "triangle-sw-open",
              111,
              "111",
              "triangle-sw-dot",
              211,
              "211",
              "triangle-sw-open-dot",
              311,
              "311",
              "triangle-nw",
              12,
              "12",
              "triangle-nw-open",
              112,
              "112",
              "triangle-nw-dot",
              212,
              "212",
              "triangle-nw-open-dot",
              312,
              "312",
              "pentagon",
              13,
              "13",
              "pentagon-open",
              113,
              "113",
              "pentagon-dot",
              213,
              "213",
              "pentagon-open-dot",
              313,
              "313",
              "hexagon",
              14,
              "14",
              "hexagon-open",
              114,
              "114",
              "hexagon-dot",
              214,
              "214",
              "hexagon-open-dot",
              314,
              "314",
              "hexagon2",
              15,
              "15",
              "hexagon2-open",
              115,
              "115",
              "hexagon2-dot",
              215,
              "215",
              "hexagon2-open-dot",
              315,
              "315",
              "octagon",
              16,
              "16",
              "octagon-open",
              116,
              "116",
              "octagon-dot",
              216,
              "216",
              "octagon-open-dot",
              316,
              "316",
              "star",
              17,
              "17",
              "star-open",
              117,
              "117",
              "star-dot",
              217,
              "217",
              "star-open-dot",
              317,
              "317",
              "hexagram",
              18,
              "18",
              "hexagram-open",
              118,
              "118",
              "hexagram-dot",
              218,
              "218",
              "hexagram-open-dot",
              318,
              "318",
              "star-triangle-up",
              19,
              "19",
              "star-triangle-up-open",
              119,
              "119",
              "star-triangle-up-dot",
              219,
              "219",
              "star-triangle-up-open-dot",
              319,
              "319",
              "star-triangle-down",
              20,
              "20",
              "star-triangle-down-open",
              120,
              "120",
              "star-triangle-down-dot",
              220,
              "220",
              "star-triangle-down-open-dot",
              320,
              "320",
              "star-square",
              21,
              "21",
              "star-square-open",
              121,
              "121",
              "star-square-dot",
              221,
              "221",
              "star-square-open-dot",
              321,
              "321",
              "star-diamond",
              22,
              "22",
              "star-diamond-open",
              122,
              "122",
              "star-diamond-dot",
              222,
              "222",
              "star-diamond-open-dot",
              322,
              "322",
              "diamond-tall",
              23,
              "23",
              "diamond-tall-open",
              123,
              "123",
              "diamond-tall-dot",
              223,
              "223",
              "diamond-tall-open-dot",
              323,
              "323",
              "diamond-wide",
              24,
              "24",
              "diamond-wide-open",
              124,
              "124",
              "diamond-wide-dot",
              224,
              "224",
              "diamond-wide-open-dot",
              324,
              "324",
              "hourglass",
              25,
              "25",
              "hourglass-open",
              125,
              "125",
              "hourglass-dot",
              225,
              "225",
              "hourglass-open-dot",
              325,
              "325",
              "bowtie",
              26,
              "26",
              "bowtie-open",
              126,
              "126",
              "bowtie-dot",
              226,
              "226",
              "bowtie-open-dot",
              326,
              "326",
              "circle-cross",
              27,
              "27",
              "circle-cross-open",
              127,
              "127",
              "circle-cross-dot",
              227,
              "227",
              "circle-cross-open-dot",
              327,
              "327",
              "circle-x",
              28,
              "28",
              "circle-x-open",
              128,
              "128",
              "circle-x-dot",
              228,
              "228",
              "circle-x-open-dot",
              328,
              "328",
              "square-cross",
              29,
              "29",
              "square-cross-open",
              129,
              "129",
              "square-cross-dot",
              229,
              "229",
              "square-cross-open-dot",
              329,
              "329",
              "square-x",
              30,
              "30",
              "square-x-open",
              130,
              "130",
              "square-x-dot",
              230,
              "230",
              "square-x-open-dot",
              330,
              "330",
              "diamond-cross",
              31,
              "31",
              "diamond-cross-open",
              131,
              "131",
              "diamond-cross-dot",
              231,
              "231",
              "diamond-cross-open-dot",
              331,
              "331",
              "diamond-x",
              32,
              "32",
              "diamond-x-open",
              132,
              "132",
              "diamond-x-dot",
              232,
              "232",
              "diamond-x-open-dot",
              332,
              "332",
              "cross-thin",
              33,
              "33",
              "cross-thin-open",
              133,
              "133",
              "cross-thin-dot",
              233,
              "233",
              "cross-thin-open-dot",
              333,
              "333",
              "x-thin",
              34,
              "34",
              "x-thin-open",
              134,
              "134",
              "x-thin-dot",
              234,
              "234",
              "x-thin-open-dot",
              334,
              "334",
              "asterisk",
              35,
              "35",
              "asterisk-open",
              135,
              "135",
              "asterisk-dot",
              235,
              "235",
              "asterisk-open-dot",
              335,
              "335",
              "hash",
              36,
              "36",
              "hash-open",
              136,
              "136",
              "hash-dot",
              236,
              "236",
              "hash-open-dot",
              336,
              "336",
              "y-up",
              37,
              "37",
              "y-up-open",
              137,
              "137",
              "y-up-dot",
              237,
              "237",
              "y-up-open-dot",
              337,
              "337",
              "y-down",
              38,
              "38",
              "y-down-open",
              138,
              "138",
              "y-down-dot",
              238,
              "238",
              "y-down-open-dot",
              338,
              "338",
              "y-left",
              39,
              "39",
              "y-left-open",
              139,
              "139",
              "y-left-dot",
              239,
              "239",
              "y-left-open-dot",
              339,
              "339",
              "y-right",
              40,
              "40",
              "y-right-open",
              140,
              "140",
              "y-right-dot",
              240,
              "240",
              "y-right-open-dot",
              340,
              "340",
              "line-ew",
              41,
              "41",
              "line-ew-open",
              141,
              "141",
              "line-ew-dot",
              241,
              "241",
              "line-ew-open-dot",
              341,
              "341",
              "line-ns",
              42,
              "42",
              "line-ns-open",
              142,
              "142",
              "line-ns-dot",
              242,
              "242",
              "line-ns-open-dot",
              342,
              "342",
              "line-ne",
              43,
              "43",
              "line-ne-open",
              143,
              "143",
              "line-ne-dot",
              243,
              "243",
              "line-ne-open-dot",
              343,
              "343",
              "line-nw",
              44,
              "44",
              "line-nw-open",
              144,
              "144",
              "line-nw-dot",
              244,
              "244",
              "line-nw-open-dot",
              344,
              "344",
              "arrow-up",
              45,
              "45",
              "arrow-up-open",
              145,
              "145",
              "arrow-up-dot",
              245,
              "245",
              "arrow-up-open-dot",
              345,
              "345",
              "arrow-down",
              46,
              "46",
              "arrow-down-open",
              146,
              "146",
              "arrow-down-dot",
              246,
              "246",
              "arrow-down-open-dot",
              346,
              "346",
              "arrow-left",
              47,
              "47",
              "arrow-left-open",
              147,
              "147",
              "arrow-left-dot",
              247,
              "247",
              "arrow-left-open-dot",
              347,
              "347",
              "arrow-right",
              48,
              "48",
              "arrow-right-open",
              148,
              "148",
              "arrow-right-dot",
              248,
              "248",
              "arrow-right-open-dot",
              348,
              "348",
              "arrow-bar-up",
              49,
              "49",
              "arrow-bar-up-open",
              149,
              "149",
              "arrow-bar-up-dot",
              249,
              "249",
              "arrow-bar-up-open-dot",
              349,
              "349",
              "arrow-bar-down",
              50,
              "50",
              "arrow-bar-down-open",
              150,
              "150",
              "arrow-bar-down-dot",
              250,
              "250",
              "arrow-bar-down-open-dot",
              350,
              "350",
              "arrow-bar-left",
              51,
              "51",
              "arrow-bar-left-open",
              151,
              "151",
              "arrow-bar-left-dot",
              251,
              "251",
              "arrow-bar-left-open-dot",
              351,
              "351",
              "arrow-bar-right",
              52,
              "52",
              "arrow-bar-right-open",
              152,
              "152",
              "arrow-bar-right-dot",
              252,
              "252",
              "arrow-bar-right-open-dot",
              352,
              "352",
              "arrow",
              53,
              "53",
              "arrow-open",
              153,
              "153",
              "arrow-dot",
              253,
              "253",
              "arrow-open-dot",
              353,
              "353",
              "arrow-wide",
              54,
              "54",
              "arrow-wide-open",
              154,
              "154",
              "arrow-wide-dot",
              254,
              "254",
              "arrow-wide-open-dot",
              354,
              "354"
            ],
            "dflt": "circle",
            "arrayOk": true,
            "editType": "style",
            "description": "Marker symbol: a name (`'diamond-open'`), a Plotly numeric code, a custom symbol registered with `symbols.register` (with the same `-open` / `-dot` variants), a `'text:…'` glyph such as `'text:🚀'`, or one per point.",
            "valType": "enumerated"
          },
          "image": {
            "strict": true,
            "arrayOk": true,
            "editType": "style",
            "description": "Image sprites: a URL or data URI drawn instead of the symbol in a `size` × `size` square (keeping its aspect ratio), or one per point (empty entries keep the symbol). `opacity` applies; `color` and `line` do not. Cross-origin URLs need CORS headers.",
            "valType": "string"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker opacity (multiplied by the trace `opacity`), or one per point. Default 1, 0.7 for bubbles.",
            "valType": "number"
          },
          "angle": {
            "dflt": 0,
            "arrayOk": true,
            "editType": "style",
            "description": "Marker rotation in degrees, clockwise, or one per point.",
            "valType": "angle"
          },
          "maxdisplayed": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Draw at most this many markers (evenly strided over the data); 0 draws all.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "Marker outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline color, one per point, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline width in CSS px, or one per point. Default 0, 1 for bubbles.",
              "valType": "number"
            }
          }
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected points while a selection is active (box/lasso select, `selectedpoints`).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected points.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Marker opacity of selected points.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Marker color of selected points.",
              "valType": "color"
            },
            "size": {
              "min": 0,
              "editType": "style",
              "description": "Marker size (px) of selected points.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of selected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of selected points.",
              "valType": "color"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected points while a selection is active (box/lasso select, `selectedpoints`).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected points.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Marker opacity of unselected points. Default: 0.2 × the marker opacity when no selected/unselected opacity is set.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Marker color of unselected points.",
              "valType": "color"
            },
            "size": {
              "min": 0,
              "editType": "style",
              "description": "Marker size (px) of unselected points.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of unselected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of unselected points.",
              "valType": "color"
            }
          }
        },
        "error_x": {
          "editType": "calc",
          "description": "Error bars along the x axis.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive x axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative x axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive x axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative x axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Half-length of the cross-bar at each end, in CSS px (default 4). 0 hides the caps.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          },
          "copy_ystyle": {
            "editType": "style",
            "description": "Use the `error_y` color, thickness and width. Defaults to true when `error_y` is visible and none of those is set here.",
            "valType": "boolean"
          }
        },
        "error_y": {
          "editType": "calc",
          "description": "Error bars along the y axis.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive y axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative y axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive y axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative y axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Half-length of the cross-bar at each end, in CSS px (default 4). 0 hides the caps.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          }
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, scatter traces draw above bars (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "depth": {
          "dflt": 0,
          "editType": "plot",
          "description": "Fill extrusion (Holochart extension, 2.5D, with `fill`): the thickness in CSS px of the slab the fill becomes, or a percentage of the plot area's width; lines, markers and labels are drawn on its front face. Filled traces share the depth, so stacked areas form layers of one slab. 0 (default) draws the trace flat.",
          "valType": "any"
        },
        "bevel": {
          "editType": "plot",
          "description": "Rounded edges of extruded shapes (with `depth`).",
          "role": "object",
          "size": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Radius of the rounded front and side edges, CSS px (at most half the size).",
            "valType": "number"
          },
          "segments": {
            "min": 1,
            "max": 16,
            "dflt": 3,
            "editType": "plot",
            "description": "Segments of each rounded edge.",
            "valType": "integer"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of extruded shapes (with `depth`): Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        }
      }
    },
    "table": {
      "categories": ["domain", "noOpacity"],
      "meta": {
        "description": "Tables: formatted values in columns with a fixed header, placed by `domain`; virtualized rows (only the visible ones are laid out and drawn) with wheel, drag and scrollbar scrolling, and drag-to-reorder columns.",
        "docsPage": "table",
        "plotlyEquivalent": "table"
      },
      "attributes": {
        "description": "Table: a grid of formatted values with a fixed header, placed by `domain`. Only the visible rows are laid out and drawn, so large tables scroll smoothly.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "columnwidth": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Relative column widths: columns share the domain width in proportion to these values (one for all, or one per column; a short array repeats its last entry, non-numeric entries count 1).",
          "valType": "number"
        },
        "columnorder": {
          "editType": "calc",
          "description": "The rendered order of the data columns: a value `2` at position `0` means that data column 0 is drawn as the third column. Dragging a header cell reorders the columns and restyles this attribute.",
          "valType": "data_array"
        },
        "header": {
          "editType": "calc",
          "description": "The header: fixed above the scrolling cells; drag a header cell to reorder columns.",
          "role": "object",
          "values": {
            "editType": "calc",
            "role": "data",
            "description": "Header text, one entry per column: a value, or an array of values for several header rows. Plotly pseudo-HTML is accepted (tags are stripped until rich text lands; `<br>` breaks lines).",
            "valType": "data_array"
          },
          "format": {
            "editType": "calc",
            "description": "d3-format specifiers applied to numeric values (e.g. `,.2f`, `.1%`), one per column or, nested, per column and row. Non-numeric values are shown as they are.",
            "valType": "data_array"
          },
          "prefix": {
            "arrayOk": true,
            "editType": "calc",
            "description": "Text before each value, one per column or, nested, per column and row.",
            "valType": "string"
          },
          "suffix": {
            "arrayOk": true,
            "editType": "calc",
            "description": "Text after each value, one per column or, nested, per column and row.",
            "valType": "string"
          },
          "height": {
            "dflt": 28,
            "editType": "plot",
            "description": "Height of the header rows in px. Rows grow to fit text that has spaces, line breaks or markup: its height plus 8 px of padding above and below (Plotly's `cellPad`).",
            "valType": "number"
          },
          "align": {
            "values": ["left", "center", "right"],
            "dflt": "center",
            "arrayOk": true,
            "editType": "plot",
            "description": "Horizontal alignment of the text in its cell, one per column or, nested, per column and row.",
            "valType": "enumerated"
          },
          "line": {
            "editType": "plot",
            "description": "Cell outlines.",
            "role": "object",
            "width": {
              "dflt": 1,
              "arrayOk": true,
              "editType": "plot",
              "description": "Width of the cell outlines in px (centered on the cell edges), one per column or, nested, per column and row.",
              "valType": "number"
            },
            "color": {
              "dflt": "grey",
              "arrayOk": true,
              "editType": "style",
              "description": "Color of the cell outlines, one per column or, nested, per column and row.",
              "valType": "color"
            }
          },
          "fill": {
            "editType": "style",
            "description": "Cell background.",
            "role": "object",
            "color": {
              "dflt": "white",
              "arrayOk": true,
              "editType": "style",
              "description": "Cell background color, one per column or, nested, per column and row (e.g. alternating row colors).",
              "valType": "color"
            }
          },
          "font": {
            "editType": "plot",
            "description": "Font of the header text. Defaults to `layout.font`.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "arrayOk": true,
              "editType": "plot",
              "description": "CSS font-family list, or one per column (nested arrays: per row).",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "plot",
              "description": "Font size in CSS px, or one per column (nested arrays: per row).",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Text color, or one per column (nested arrays: per row).",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "arrayOk": true,
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`, or one per column.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "arrayOk": true,
              "editType": "plot",
              "description": "Font style, or one per column (nested arrays: per row).",
              "valType": "enumerated"
            }
          }
        },
        "cells": {
          "editType": "calc",
          "description": "The cells, scrolled with the wheel, by dragging, or with the scrollbar.",
          "role": "object",
          "values": {
            "editType": "calc",
            "role": "data",
            "description": "Cell values, column by column: `values[column][row]`. Columns may differ in length (short ones are padded with empty cells). A column beyond the header gets an empty header.",
            "valType": "data_array"
          },
          "format": {
            "editType": "calc",
            "description": "d3-format specifiers applied to numeric values (e.g. `,.2f`, `.1%`), one per column or, nested, per column and row. Non-numeric values are shown as they are.",
            "valType": "data_array"
          },
          "prefix": {
            "arrayOk": true,
            "editType": "calc",
            "description": "Text before each value, one per column or, nested, per column and row.",
            "valType": "string"
          },
          "suffix": {
            "arrayOk": true,
            "editType": "calc",
            "description": "Text after each value, one per column or, nested, per column and row.",
            "valType": "string"
          },
          "height": {
            "dflt": 20,
            "editType": "plot",
            "description": "Height of the rows in px. Rows grow to fit text that has spaces, line breaks or markup: its height plus 8 px of padding above and below (Plotly's `cellPad`).",
            "valType": "number"
          },
          "align": {
            "values": ["left", "center", "right"],
            "dflt": "center",
            "arrayOk": true,
            "editType": "plot",
            "description": "Horizontal alignment of the text in its cell, one per column or, nested, per column and row.",
            "valType": "enumerated"
          },
          "line": {
            "editType": "plot",
            "description": "Cell outlines.",
            "role": "object",
            "width": {
              "dflt": 1,
              "arrayOk": true,
              "editType": "plot",
              "description": "Width of the cell outlines in px (centered on the cell edges), one per column or, nested, per column and row.",
              "valType": "number"
            },
            "color": {
              "dflt": "grey",
              "arrayOk": true,
              "editType": "style",
              "description": "Color of the cell outlines, one per column or, nested, per column and row.",
              "valType": "color"
            }
          },
          "fill": {
            "editType": "style",
            "description": "Cell background.",
            "role": "object",
            "color": {
              "dflt": "white",
              "arrayOk": true,
              "editType": "style",
              "description": "Cell background color, one per column or, nested, per column and row (e.g. alternating row colors).",
              "valType": "color"
            }
          },
          "font": {
            "editType": "plot",
            "description": "Font of the cells text. Defaults to `layout.font`.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "arrayOk": true,
              "editType": "plot",
              "description": "CSS font-family list, or one per column (nested arrays: per row).",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "plot",
              "description": "Font size in CSS px, or one per column (nested arrays: per row).",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Text color, or one per column (nested arrays: per row).",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "arrayOk": true,
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`, or one per column.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "arrayOk": true,
              "editType": "plot",
              "description": "Font style, or one per column (nested arrays: per row).",
              "valType": "enumerated"
            }
          }
        }
      }
    },
    "candlestick": {
      "categories": ["cartesian", "showLegend", "candlestick", "boxLayout"],
      "meta": {
        "description": "Candlesticks: the open, high, low and close of each period as a body from open to close with wicks to the high and low, green when the price rose and red when it fell, drawn as one instanced GPU rect set and one batch of line segments.",
        "docsPage": "candlestick",
        "plotlyEquivalent": "candlestick"
      },
      "attributes": {
        "description": "Candlestick: the open, high, low and close of each period as a body from open to close with wicks to the high and low, colored by direction.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          },
          "split": {
            "dflt": false,
            "editType": "style",
            "description": "Show the open, high, low and close in separate labels, each at its price, instead of one label. `hovertemplate` is then ignored.",
            "valType": "boolean"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x coordinate of each candle (usually dates). Default: 0, 1, 2, …",
          "valType": "data_array"
        },
        "open": {
          "editType": "calc",
          "role": "data",
          "description": "The open price of each period, in y-axis data units.",
          "valType": "data_array"
        },
        "high": {
          "editType": "calc",
          "role": "data",
          "description": "The high price of each period, in y-axis data units.",
          "valType": "data_array"
        },
        "low": {
          "editType": "calc",
          "role": "data",
          "description": "The low price of each period, in y-axis data units.",
          "valType": "data_array"
        },
        "close": {
          "editType": "calc",
          "role": "data",
          "description": "The close price of each period, in y-axis data units.",
          "valType": "data_array"
        },
        "xperiod": {
          "editType": "calc",
          "description": "Only on date or linear x axes: snap each x value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `xperiodalignment`.",
          "valType": "any"
        },
        "xperiod0": {
          "editType": "calc",
          "description": "A period boundary for `xperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "xperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `xperiod`.",
          "valType": "enumerated"
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of x values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of the prices in hover labels. Default: the y axis format.",
          "valType": "string"
        },
        "text": {
          "dflt": "",
          "arrayOk": true,
          "editType": "calc",
          "description": "Hover text: one string for every candle, or one per candle. `hovertext` wins.",
          "valType": "string"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, financial traces draw above bars and boxes and below scatter traces (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "line": {
          "editType": "style",
          "description": "Outline and wick style of every candle.",
          "role": "object",
          "width": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Outline and wick width in CSS px of every candle. `increasing.line.width` and `decreasing.line.width` override it per direction.",
            "valType": "number"
          }
        },
        "increasing": {
          "editType": "style",
          "description": "Style of rising candles: candles whose close is above their open (an unchanged candle compares its close with the previous close).",
          "role": "object",
          "line": {
            "editType": "style",
            "description": "Outline and wick style of rising candles.",
            "role": "object",
            "color": {
              "dflt": "#3D9970",
              "editType": "style",
              "description": "Line color of rising candles (outline and wicks).",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "editType": "style",
              "description": "Line width in CSS px of rising candles. Default: `line.width`.",
              "valType": "number"
            }
          },
          "fillcolor": {
            "editType": "style",
            "description": "Body fill of rising candles. Default: their line color at half opacity.",
            "valType": "color"
          }
        },
        "decreasing": {
          "editType": "style",
          "description": "Style of falling candles: candles whose close is below their open (an unchanged candle compares its close with the previous close).",
          "role": "object",
          "line": {
            "editType": "style",
            "description": "Outline and wick style of falling candles.",
            "role": "object",
            "color": {
              "dflt": "#FF4136",
              "editType": "style",
              "description": "Line color of falling candles (outline and wicks).",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "editType": "style",
              "description": "Line width in CSS px of falling candles. Default: `line.width`.",
              "valType": "number"
            }
          },
          "fillcolor": {
            "editType": "style",
            "description": "Body fill of falling candles. Default: their line color at half opacity.",
            "valType": "color"
          }
        },
        "whiskerwidth": {
          "min": 0,
          "max": 1,
          "dflt": 0,
          "editType": "calc",
          "description": "Width of caps at the ends of the wicks, as a fraction of the candle width (0: no caps).",
          "valType": "number"
        }
      }
    },
    "funnel": {
      "categories": ["cartesian", "funnel", "showLegend"],
      "meta": {
        "description": "Funnel charts: the stages of a process as bars centered on the value axis, with connector regions between stages, drawn as one instanced GPU rect set with batched SDF labels.",
        "docsPage": "funnel",
        "plotlyEquivalent": "funnel"
      },
      "attributes": {
        "description": "Funnel: stages of a process as bars centered on the value axis, with connector regions between them.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": [
            "name",
            "x",
            "y",
            "text",
            "percent initial",
            "percent previous",
            "percent total"
          ],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show: the position and value (`x`, `y`), `text`, the value as a percentage of the first stage, of the previous stage and of the trace's total and the trace `name`; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x coordinates: bar positions for vertical bars, bar lengths otherwise. Numbers, dates or category names depending on the axis type.",
          "valType": "data_array"
        },
        "x0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting x coordinate when `x` is not given: bar `i` is at `x0 + i·dx`.",
          "valType": "any"
        },
        "dx": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between implicit x coordinates (see `x0`).",
          "valType": "number"
        },
        "xperiod": {
          "editType": "calc",
          "description": "Only on date or linear x axes: snap each x value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `xperiodalignment`.",
          "valType": "any"
        },
        "xperiod0": {
          "editType": "calc",
          "description": "A period boundary for `xperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "xperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `xperiod`.",
          "valType": "enumerated"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "y coordinates: bar positions for horizontal bars, bar lengths otherwise. Numbers, dates or category names depending on the axis type.",
          "valType": "data_array"
        },
        "y0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting y coordinate when `y` is not given: bar `i` is at `y0 + i·dy`.",
          "valType": "any"
        },
        "dy": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between implicit y coordinates (see `y0`).",
          "valType": "number"
        },
        "yperiod": {
          "editType": "calc",
          "description": "Only on date or linear y axes: snap each y value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `yperiodalignment`.",
          "valType": "any"
        },
        "yperiod0": {
          "editType": "calc",
          "description": "A period boundary for `yperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "yperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `yperiod`.",
          "valType": "enumerated"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per bar, drawn per `textposition` and shown in hover labels.",
          "valType": "string"
        },
        "textposition": {
          "values": ["inside", "outside", "auto", "none"],
          "dflt": "auto",
          "arrayOk": true,
          "editType": "calc",
          "description": "Where bar labels go: `inside` (against the bar end, see `insidetextanchor`), `outside` (past the bar end; inner bars of a stack stay inside), `auto` (inside when it fits, else outside), `none`.",
          "valType": "enumerated"
        },
        "insidetextanchor": {
          "values": ["end", "middle", "start"],
          "dflt": "middle",
          "editType": "plot",
          "description": "Where inside labels sit along the bar.",
          "valType": "enumerated"
        },
        "textangle": {
          "dflt": 0,
          "extras": ["auto"],
          "editType": "plot",
          "description": "Label rotation in degrees, clockwise. `'auto'` turns inside labels 90° when that fits the bar better.",
          "valType": "angle"
        },
        "textfont": {
          "editType": "calc",
          "description": "Font of bar labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextfont": {
          "editType": "calc",
          "description": "Font of labels inside bars. Defaults to `textfont`, with a color contrasting the bar fill.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "outsidetextfont": {
          "editType": "calc",
          "description": "Font of labels outside bars. Defaults to `textfont`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "constraintext": {
          "values": ["inside", "outside", "both", "none"],
          "dflt": "both",
          "editType": "calc",
          "description": "Shrink labels (inside, outside, or both) so they are no larger than their bar.",
          "valType": "enumerated"
        },
        "cliponaxis": {
          "dflt": true,
          "editType": "plot",
          "description": "Clip labels to the plot area. `false` is not drawn yet: labels are always clipped to the subplot.",
          "valType": "boolean"
        },
        "offset": {
          "editType": "calc",
          "description": "Shift of the bars' leading edge from their position, in position-axis units. Default: centered in the (group) slot.",
          "valType": "number"
        },
        "width": {
          "min": 0,
          "editType": "calc",
          "description": "Bar width in position-axis units. Default: the slot left by `layout.funnelgap` and the funnel mode.",
          "valType": "number"
        },
        "offsetgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces with the same offset group share one slot in `group` mode (and stack together in `stack`/`relative` modes); bars at the same position line up, also across subplots on the same position axis.",
          "valType": "string"
        },
        "alignmentgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces on the same position axis with the same alignment group split each position between their offset groups; different alignment groups lay out independently.",
          "valType": "string"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, bars draw below scatter traces (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "orientation": {
          "values": ["v", "h"],
          "editType": "calc",
          "description": "`'h'` (the default): horizontal bars, one per `y` stage, `x` long; `'v'`: vertical bars, one per `x` stage, `y` long (the default when only `y` is given). A horizontal funnel's stage axis is reversed (first stage on top) and its value axis hidden, unless another trace type uses them.",
          "valType": "enumerated"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for bar labels, overriding `textinfo`: `%{value}`, `%{percentInitial}`, `%{percentPrevious}`, `%{percentTotal}` (ratios, shown as percentages without a format), `%{label}` (stage), `%{x}`, `%{y}`, `%{text}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{percentInitial:.1%}`).",
          "valType": "string"
        },
        "textinfo": {
          "flags": [
            "label",
            "text",
            "percent initial",
            "percent previous",
            "percent total",
            "value"
          ],
          "extras": ["none"],
          "editType": "plot",
          "description": "What bar labels show, in a fixed order (label, text, value, then the percentages of the first stage, the previous stage and the trace's total), one per line. Default `'value'`, or `'text+value'` when `text` is an array. Percentages are computed per trace.",
          "valType": "flaglist"
        },
        "marker": {
          "editType": "calc",
          "description": "Bar style.",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Bar fill color, one per bar, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Bar opacity (multiplied by the trace `opacity`), or one per bar.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "Bar outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Bar outline color, one per bar, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Bar outline width in CSS px (centered on the edge), or one per bar.",
              "valType": "number"
            }
          }
        },
        "connector": {
          "editType": "plot",
          "description": "Regions connecting each stage to the next.",
          "role": "object",
          "fillcolor": {
            "editType": "style",
            "description": "Fill of the regions between stages. Default: `marker.color` at half its opacity (black at half opacity for per-bar colors).",
            "valType": "color"
          },
          "line": {
            "editType": "plot",
            "description": "The lines along the edges of the connector regions.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "editType": "style",
              "description": "Color of the lines along the edges of the connector regions.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "editType": "plot",
              "description": "Width in CSS px of the lines along the edges of the connector regions (0: not drawn).",
              "valType": "number"
            },
            "dash": {
              "dflt": "solid",
              "editType": "style",
              "description": "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
              "valType": "string"
            }
          },
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the connector regions and lines.",
            "valType": "boolean"
          }
        },
        "depth": {
          "dflt": 0,
          "editType": "plot",
          "description": "Extrusion toward the viewer (Holochart extension, 2.5D): CSS px, a percentage of each shape's width (`'60%'`), or one number per item. 0 (default) draws the trace flat. Seen in perspective with `layout.view3d`; in the flat view extruded shapes are lit from the front.",
          "valType": "any"
        },
        "bevel": {
          "editType": "plot",
          "description": "Rounded edges of extruded shapes (with `depth`).",
          "role": "object",
          "size": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Radius of the rounded front and side edges, CSS px (at most half the size).",
            "valType": "number"
          },
          "segments": {
            "min": 1,
            "max": 16,
            "dflt": 3,
            "editType": "plot",
            "description": "Segments of each rounded edge.",
            "valType": "integer"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of extruded shapes (with `depth`): Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        }
      }
    },
    "funnelarea": {
      "categories": ["domain", "pie-like", "funnelarea", "showLegend"],
      "meta": {
        "description": "Funnel areas: the stages of a process as stacked trapezoids with areas proportional to their values, placed by `domain`, drawn as one batched GPU polygon fill with batched SDF labels.",
        "docsPage": "funnelarea",
        "plotlyEquivalent": "funnelarea"
      },
      "attributes": {
        "description": "Funnel area: stages of a process as stacked trapezoids with areas proportional to their values.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["label", "text", "value", "percent", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show, in a fixed order; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "labels": {
          "editType": "calc",
          "role": "data",
          "description": "Slice labels. Slices with the same label are merged: their `values` are summed (or occurrences counted without `values`), and other per-slice attributes use the first non-empty entry.",
          "valType": "data_array"
        },
        "label0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Without `labels`: numeric labels `label0 + i·dlabel` (only used when `values` is set).",
          "valType": "number"
        },
        "dlabel": {
          "dflt": 1,
          "editType": "calc",
          "description": "Label step, see `label0`.",
          "valType": "number"
        },
        "values": {
          "editType": "calc",
          "role": "data",
          "description": "Slice values. Non-numeric entries are skipped; merged slices whose total is negative are dropped. Without `values` every label counts 1.",
          "valType": "data_array"
        },
        "marker": {
          "editType": "calc",
          "description": "Stage style.",
          "role": "object",
          "colors": {
            "editType": "calc",
            "description": "Stage colors, one per data point. Unset stages take `layout.funnelareacolorway` colors, shared by label across all funnel areas of the figure.",
            "valType": "data_array"
          },
          "line": {
            "editType": "calc",
            "description": "Stage outlines.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color of the stages, or one per stage. Default: `layout.paper_bgcolor`.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 1,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width in CSS px (centered on the edge), or one per stage.",
              "valType": "number"
            }
          },
          "pattern": {
            "editType": "style",
            "description": "Hatch pattern of the stage fill (drawn in screen px, for print and grayscale).",
            "role": "object",
            "shape": {
              "values": ["", "/", "\\", "x", "-", "|", "+", "."],
              "dflt": "",
              "arrayOk": true,
              "editType": "style",
              "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none, or one per stage.",
              "valType": "enumerated"
            },
            "fillmode": {
              "values": ["replace", "overlay"],
              "dflt": "replace",
              "editType": "style",
              "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
              "valType": "enumerated"
            },
            "bgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent, or one per stage.",
              "valType": "color"
            },
            "fgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`, or one per stage.",
              "valType": "color"
            },
            "fgopacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "arrayOk": true,
              "editType": "style",
              "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots, or one per stage.",
              "valType": "number"
            },
            "solidity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "arrayOk": true,
              "editType": "style",
              "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color, or one per stage.",
              "valType": "number"
            }
          }
        },
        "text": {
          "editType": "plot",
          "description": "Text per slice, shown on the slice with the `text` flag of `textinfo`, and in hover labels unless `hovertext` is set.",
          "valType": "data_array"
        },
        "scalegroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Funnel areas with the same non-empty scale group are sized by their totals: their areas are proportional to the sums of their values.",
          "valType": "string"
        },
        "textinfo": {
          "flags": ["label", "text", "value", "percent"],
          "extras": ["none"],
          "editType": "calc",
          "description": "What stage labels show, in a fixed order (label, text, value, percent of the total), one per line. Default `'percent'`, or `'text+percent'` when `text` is an array. Use `texttemplate` for other layouts.",
          "valType": "flaglist"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for stage labels, overriding `textinfo`: `%{label}`, `%{value}`, `%{percent}`, `%{text}`, `%{color}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{percent:.1%}`). Without a format, `value` and `percent` are formatted like `textinfo`.",
          "valType": "string"
        },
        "textposition": {
          "values": ["inside", "none"],
          "dflt": "inside",
          "arrayOk": true,
          "editType": "plot",
          "description": "Where stage labels go: `inside` (centered in the stage, shrunk to fit) or `none`.",
          "valType": "enumerated"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of slice labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per slice.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per slice.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextfont": {
          "editType": "plot",
          "description": "Font of labels inside slices. Defaults to `textfont`, with a color contrasting the slice.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per slice.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per slice.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "title": {
          "editType": "plot",
          "description": "The funnel area title.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "plot",
            "description": "Title of the pie. Empty: no title.",
            "valType": "string"
          },
          "font": {
            "editType": "plot",
            "description": "Title font. Defaults to `layout.font`.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "plot",
              "description": "CSS font-family list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "plot",
              "description": "Font size in CSS px, or one per slice.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Text color, or one per slice.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "plot",
              "description": "Font style.",
              "valType": "enumerated"
            }
          },
          "position": {
            "values": ["top left", "top center", "top right"],
            "dflt": "top center",
            "editType": "plot",
            "description": "Where the title goes above the funnel.",
            "valType": "enumerated"
          }
        },
        "aspectratio": {
          "min": 0,
          "dflt": 1,
          "editType": "plot",
          "description": "Height of the funnel relative to its width.",
          "valType": "number"
        },
        "baseratio": {
          "min": 0,
          "max": 1,
          "dflt": 0.333,
          "editType": "plot",
          "description": "Width of the funnel's narrow end relative to its wide end.",
          "valType": "number"
        }
      }
    },
    "indicator": {
      "categories": ["domain", "noOpacity", "noHover"],
      "meta": {
        "description": "A single value as a big number, its delta to a reference and / or an angular or bullet gauge with steps and a threshold, placed by `domain`; the gauge is one instanced GPU arc or rect set and the text one SDF batch.",
        "docsPage": "indicator",
        "plotlyEquivalent": "indicator"
      },
      "attributes": {
        "description": "A single value as a big number, its delta to a reference, and / or a gauge (angular or bullet) with colored steps and a threshold.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "mode": {
          "flags": ["number", "delta", "gauge"],
          "dflt": "number",
          "editType": "calc",
          "description": "What shows the value: `number` (the value as text), `delta` (its difference to `delta.reference` as text) and / or `gauge` (the value on an angular or bullet gauge).",
          "valType": "flaglist"
        },
        "value": {
          "editType": "calc",
          "animatable": true,
          "description": "The value to show. Transitions (`layout.transition`, `animate`) count the number up and move the gauge bar.",
          "valType": "number"
        },
        "align": {
          "values": ["left", "center", "right"],
          "editType": "plot",
          "description": "Horizontal alignment of the number and delta in the domain. No effect with an angular gauge, where they are always centered. Default `center`.",
          "valType": "enumerated"
        },
        "title": {
          "editType": "plot",
          "description": "The indicator title.",
          "role": "object",
          "text": {
            "editType": "plot",
            "description": "Title of the indicator (Plotly pseudo-HTML allowed).",
            "valType": "string"
          },
          "align": {
            "values": ["left", "center", "right"],
            "editType": "plot",
            "description": "Horizontal alignment of the title in the domain. Default `center`; a bullet gauge puts its title to the left of the domain, right-aligned.",
            "valType": "enumerated"
          },
          "font": {
            "editType": "plot",
            "description": "Title font. Defaults to `layout.font` at a quarter of the number font size.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "plot",
              "description": "CSS font-family list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "plot",
              "description": "Font size in CSS px.",
              "valType": "number"
            },
            "color": {
              "editType": "plot",
              "description": "Text color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "plot",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "number": {
          "editType": "plot",
          "description": "The number (`mode` with `number`).",
          "role": "object",
          "valueformat": {
            "dflt": "",
            "editType": "plot",
            "description": "d3-format specifier of the number. Default: rounded like a tick label of an axis from 0 to 1.5 times the value (or the gauge axis).",
            "valType": "string"
          },
          "font": {
            "editType": "plot",
            "description": "Font of the number. Defaults to `layout.font`; without a `size`, the number (and the delta) scale to fit the domain.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "plot",
              "description": "CSS font-family list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "plot",
              "description": "Font size in CSS px.",
              "valType": "number"
            },
            "color": {
              "editType": "plot",
              "description": "Text color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "plot",
              "description": "Font style.",
              "valType": "enumerated"
            }
          },
          "prefix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text before the number.",
            "valType": "string"
          },
          "suffix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text after the number.",
            "valType": "string"
          }
        },
        "delta": {
          "editType": "calc",
          "description": "The delta (`mode` with `delta`).",
          "role": "object",
          "reference": {
            "editType": "calc",
            "animatable": true,
            "description": "The reference the delta is computed from. Default: `value`.",
            "valType": "number"
          },
          "position": {
            "values": ["top", "bottom", "left", "right"],
            "dflt": "bottom",
            "editType": "plot",
            "description": "Where the delta goes relative to the number.",
            "valType": "enumerated"
          },
          "relative": {
            "dflt": false,
            "editType": "plot",
            "description": "Show the relative change `(value − reference) / reference`.",
            "valType": "boolean"
          },
          "valueformat": {
            "editType": "plot",
            "description": "d3-format specifier of the delta. Default `'2%'` (a percentage, trailing zeros trimmed) when `relative`, else rounded like the number.",
            "valType": "string"
          },
          "increasing": {
            "editType": "plot",
            "description": "Style of a positive delta.",
            "role": "object",
            "symbol": {
              "dflt": "▲",
              "editType": "plot",
              "description": "Symbol before a positive delta.",
              "valType": "string"
            },
            "color": {
              "dflt": "#3D9970",
              "editType": "plot",
              "description": "Color of a positive (or zero) delta.",
              "valType": "color"
            }
          },
          "decreasing": {
            "editType": "plot",
            "description": "Style of a negative delta.",
            "role": "object",
            "symbol": {
              "dflt": "▼",
              "editType": "plot",
              "description": "Symbol before a negative delta.",
              "valType": "string"
            },
            "color": {
              "dflt": "#FF4136",
              "editType": "plot",
              "description": "Color of a negative delta.",
              "valType": "color"
            }
          },
          "font": {
            "editType": "plot",
            "description": "Font of the delta. Defaults to `layout.font`, at half the number font size (or the number font size without a number).",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "plot",
              "description": "CSS font-family list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "plot",
              "description": "Font size in CSS px.",
              "valType": "number"
            },
            "color": {
              "editType": "plot",
              "description": "Text color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "plot",
              "description": "Font style.",
              "valType": "enumerated"
            }
          },
          "prefix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text between the symbol and the delta.",
            "valType": "string"
          },
          "suffix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text after the delta.",
            "valType": "string"
          }
        },
        "gauge": {
          "editType": "plot",
          "description": "The gauge (`mode` with `gauge`).",
          "role": "object",
          "shape": {
            "values": ["angular", "bullet"],
            "dflt": "angular",
            "editType": "plot",
            "description": "Gauge shape: `angular` (a half ring with the number in its middle) or `bullet` (a horizontal bar, the number to its right).",
            "valType": "enumerated"
          },
          "bar": {
            "editType": "calc",
            "description": "The bar from the start of the axis to the value. Default thickness 0.5 (0.25 on a bullet gauge) of the gauge's.",
            "role": "object",
            "color": {
              "dflt": "green",
              "editType": "plot",
              "description": "Fill color of the value bar.",
              "valType": "color"
            },
            "line": {
              "editType": "plot",
              "description": "Outline of the value bar.",
              "role": "object",
              "color": {
                "dflt": "#444",
                "editType": "plot",
                "description": "Outline color of the value bar.",
                "valType": "color"
              },
              "width": {
                "min": 0,
                "dflt": 0,
                "editType": "plot",
                "description": "Outline width of the value bar in CSS px (centered on its edge).",
                "valType": "number"
              }
            },
            "thickness": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "plot",
              "description": "Thickness of the value bar as a fraction of the gauge's thickness, centered on it.",
              "valType": "number"
            }
          },
          "bgcolor": {
            "editType": "plot",
            "description": "Gauge background color. Default: `layout.paper_bgcolor`.",
            "valType": "color"
          },
          "bordercolor": {
            "dflt": "#444",
            "editType": "plot",
            "description": "Color of the gauge outline.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Width of the gauge outline in CSS px.",
            "valType": "number"
          },
          "axis": {
            "editType": "plot",
            "description": "The gauge axis: its range, ticks and tick labels.",
            "role": "object",
            "range": {
              "items": [
                {
                  "dflt": null,
                  "valType": "any"
                },
                {
                  "dflt": null,
                  "valType": "any"
                }
              ],
              "editType": "plot",
              "description": "Values at the start and end of the gauge; a `null` end keeps its default. Default `[0, 1.5 × value]`.",
              "valType": "info_array"
            },
            "visible": {
              "dflt": true,
              "editType": "plot",
              "description": "Show the axis ticks and tick labels.",
              "valType": "boolean"
            },
            "tickmode": {
              "values": ["auto", "linear", "array"],
              "editType": "plot",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`. Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "plot",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "plot",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "plot",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "plot",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "plot",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "plot",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "plot",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "plot",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "plot",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "plot",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "plot",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickformatstops": {
              "editType": "plot",
              "description": "Zoom-dependent tick formats: the first enabled stop whose `dtickrange` contains the current tick step replaces `tickformat`.",
              "itemName": "tickformatstop",
              "role": "items",
              "items": {
                "editType": "plot",
                "role": "object",
                "enabled": {
                  "dflt": true,
                  "description": "Whether this stop is used.",
                  "valType": "boolean",
                  "editType": "plot"
                },
                "visible": {
                  "dflt": true,
                  "description": "Set to `false` (by the template machinery) when `templateitemname` names no template stop; hidden stops are ignored like disabled ones.",
                  "valType": "boolean",
                  "editType": "plot"
                },
                "dtickrange": {
                  "items": [
                    {
                      "dflt": null,
                      "valType": "any"
                    },
                    {
                      "dflt": null,
                      "valType": "any"
                    }
                  ],
                  "description": "Range `[min, max]` of the tick step (`dtick`) this format applies to; `null` for an open end. Date steps are in ms or `M<n>`.",
                  "valType": "info_array",
                  "editType": "plot"
                },
                "value": {
                  "dflt": "",
                  "description": "The `tickformat` to use while the tick step is inside `dtickrange`.",
                  "valType": "string",
                  "editType": "plot"
                },
                "name": {
                  "editType": "plot",
                  "description": "Name of this tickformatstop, used to reference it from a template via `templateitemname`.",
                  "valType": "string"
                },
                "templateitemname": {
                  "editType": "plot",
                  "description": "Name of a template tickformatstop to inherit from. If no template item matches, this tickformatstop is hidden (`visible: false`).",
                  "valType": "string"
                }
              }
            },
            "tickprefix": {
              "dflt": "",
              "editType": "plot",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "plot",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "plot",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "plot",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "plot",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "plot",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "plot",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "plot",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "outside",
              "editType": "plot",
              "description": "Draw tick marks outside or inside the gauge, or not at all (`''`).",
              "valType": "enumerated"
            },
            "tickcolor": {
              "dflt": "#444",
              "editType": "plot",
              "description": "Tick color.",
              "valType": "color"
            },
            "tickfont": {
              "editType": "plot",
              "description": "Tick-label font. Defaults to `layout.font`.",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "editType": "plot",
                "description": "CSS font-family list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "editType": "plot",
                "description": "Font size in CSS px.",
                "valType": "number"
              },
              "color": {
                "editType": "plot",
                "description": "Text color.",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "editType": "plot",
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "editType": "plot",
                "description": "Font style.",
                "valType": "enumerated"
              }
            }
          },
          "steps": {
            "editType": "plot",
            "description": "Colored bands of the gauge (ranges such as \"good\" / \"bad\"), drawn under the value bar.",
            "itemName": "step",
            "role": "items",
            "items": {
              "role": "object",
              "color": {
                "editType": "plot",
                "description": "Fill color of the step.",
                "valType": "color"
              },
              "line": {
                "editType": "plot",
                "description": "Outline of the step.",
                "role": "object",
                "color": {
                  "dflt": "#444",
                  "editType": "plot",
                  "description": "Outline color of the step.",
                  "valType": "color"
                },
                "width": {
                  "min": 0,
                  "dflt": 0,
                  "editType": "plot",
                  "description": "Outline width of the step in CSS px (centered on its edge).",
                  "valType": "number"
                }
              },
              "thickness": {
                "min": 0,
                "max": 1,
                "dflt": 1,
                "editType": "plot",
                "description": "Thickness of the step as a fraction of the gauge's thickness, centered on it.",
                "valType": "number"
              },
              "range": {
                "items": [
                  {
                    "editType": "plot",
                    "valType": "number"
                  },
                  {
                    "editType": "plot",
                    "valType": "number"
                  }
                ],
                "editType": "plot",
                "description": "Axis values the step spans.",
                "valType": "info_array"
              },
              "name": {
                "editType": "none",
                "description": "Name of this step, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template step to inherit from. If no template item matches, this step is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "threshold": {
            "editType": "plot",
            "description": "A line marking a threshold value on the gauge.",
            "role": "object",
            "line": {
              "editType": "plot",
              "description": "The threshold line.",
              "role": "object",
              "color": {
                "dflt": "#444",
                "editType": "plot",
                "description": "Color of the threshold line.",
                "valType": "color"
              },
              "width": {
                "min": 0,
                "dflt": 1,
                "editType": "plot",
                "description": "Width of the threshold line in CSS px.",
                "valType": "number"
              }
            },
            "thickness": {
              "min": 0,
              "max": 1,
              "dflt": 0.85,
              "editType": "plot",
              "description": "Length of the threshold line as a fraction of the gauge's thickness, centered on it.",
              "valType": "number"
            },
            "value": {
              "editType": "calc",
              "description": "Axis value marked by a line across the gauge. Unset: no line.",
              "valType": "number"
            }
          }
        }
      }
    },
    "ohlc": {
      "categories": ["cartesian", "showLegend"],
      "meta": {
        "description": "OHLC bars: the open, high, low and close of each period as a low–high line with an open tick on the left and a close tick on the right, green when the price rose and red when it fell, drawn as batched GPU line segments.",
        "docsPage": "ohlc",
        "plotlyEquivalent": "ohlc"
      },
      "attributes": {
        "description": "OHLC: the open, high, low and close of each period as a vertical line from low to high with an open tick on the left and a close tick on the right, colored by direction.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          },
          "split": {
            "dflt": false,
            "editType": "style",
            "description": "Show the open, high, low and close in separate labels, each at its price, instead of one label. `hovertemplate` is then ignored.",
            "valType": "boolean"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x coordinate of each bar (usually dates). Default: 0, 1, 2, …",
          "valType": "data_array"
        },
        "open": {
          "editType": "calc",
          "role": "data",
          "description": "The open price of each period, in y-axis data units.",
          "valType": "data_array"
        },
        "high": {
          "editType": "calc",
          "role": "data",
          "description": "The high price of each period, in y-axis data units.",
          "valType": "data_array"
        },
        "low": {
          "editType": "calc",
          "role": "data",
          "description": "The low price of each period, in y-axis data units.",
          "valType": "data_array"
        },
        "close": {
          "editType": "calc",
          "role": "data",
          "description": "The close price of each period, in y-axis data units.",
          "valType": "data_array"
        },
        "xperiod": {
          "editType": "calc",
          "description": "Only on date or linear x axes: snap each x value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `xperiodalignment`.",
          "valType": "any"
        },
        "xperiod0": {
          "editType": "calc",
          "description": "A period boundary for `xperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "xperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `xperiod`.",
          "valType": "enumerated"
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of x values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of the prices in hover labels. Default: the y axis format.",
          "valType": "string"
        },
        "text": {
          "dflt": "",
          "arrayOk": true,
          "editType": "calc",
          "description": "Hover text: one string for every bar, or one per bar. `hovertext` wins.",
          "valType": "string"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, financial traces draw above bars and boxes and below scatter traces (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "line": {
          "editType": "style",
          "description": "Line style of every bar.",
          "role": "object",
          "width": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Line width in CSS px of every bar. `increasing.line.width` and `decreasing.line.width` override it per direction.",
            "valType": "number"
          },
          "dash": {
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style of every bar: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`. `increasing.line.dash` and `decreasing.line.dash` override it per direction.",
            "valType": "string"
          }
        },
        "increasing": {
          "editType": "style",
          "description": "Style of rising bars: bars whose close is above their open (an unchanged bar compares its close with the previous close).",
          "role": "object",
          "line": {
            "editType": "style",
            "description": "Line style of rising bars.",
            "role": "object",
            "color": {
              "dflt": "#3D9970",
              "editType": "style",
              "description": "Line color of rising bars.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "editType": "style",
              "description": "Line width in CSS px of rising bars. Default: `line.width`.",
              "valType": "number"
            },
            "dash": {
              "editType": "style",
              "description": "Dash style of rising bars (see `line.dash`). Default: `line.dash`.",
              "valType": "string"
            }
          }
        },
        "decreasing": {
          "editType": "style",
          "description": "Style of falling bars: bars whose close is below their open (an unchanged bar compares its close with the previous close).",
          "role": "object",
          "line": {
            "editType": "style",
            "description": "Line style of falling bars.",
            "role": "object",
            "color": {
              "dflt": "#FF4136",
              "editType": "style",
              "description": "Line color of falling bars.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "editType": "style",
              "description": "Line width in CSS px of falling bars. Default: `line.width`.",
              "valType": "number"
            },
            "dash": {
              "editType": "style",
              "description": "Dash style of falling bars (see `line.dash`). Default: `line.dash`.",
              "valType": "string"
            }
          }
        },
        "tickwidth": {
          "min": 0,
          "max": 0.5,
          "dflt": 0.3,
          "editType": "calc",
          "description": "Length of the open (left) and close (right) ticks, as a fraction of the smallest x spacing between bars of the ohlc traces of the subplot.",
          "valType": "number"
        }
      }
    },
    "waterfall": {
      "categories": ["cartesian", "waterfall", "showLegend"],
      "meta": {
        "description": "Waterfall charts: how a running total is built from positive and negative changes, with sum bars and connector lines, drawn as one instanced GPU rect set with batched SDF labels.",
        "docsPage": "waterfall",
        "plotlyEquivalent": "waterfall"
      },
      "attributes": {
        "description": "Waterfall: bars showing how a running total is built from positive and negative changes, with sum bars and connector lines.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["name", "x", "y", "text", "initial", "delta", "final"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show: the position and value (`x`, `y`), `text`, the running total before (`initial`) and after (`final`) the bar and its change (`delta`, with ▲ or ▼) and the trace `name`; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x coordinates: bar positions for vertical bars, bar lengths otherwise. Numbers, dates or category names depending on the axis type.",
          "valType": "data_array"
        },
        "x0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting x coordinate when `x` is not given: bar `i` is at `x0 + i·dx`.",
          "valType": "any"
        },
        "dx": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between implicit x coordinates (see `x0`).",
          "valType": "number"
        },
        "xperiod": {
          "editType": "calc",
          "description": "Only on date or linear x axes: snap each x value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `xperiodalignment`.",
          "valType": "any"
        },
        "xperiod0": {
          "editType": "calc",
          "description": "A period boundary for `xperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "xperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `xperiod`.",
          "valType": "enumerated"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "y coordinates: bar positions for horizontal bars, bar lengths otherwise. Numbers, dates or category names depending on the axis type.",
          "valType": "data_array"
        },
        "y0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Starting y coordinate when `y` is not given: bar `i` is at `y0 + i·dy`.",
          "valType": "any"
        },
        "dy": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between implicit y coordinates (see `y0`).",
          "valType": "number"
        },
        "yperiod": {
          "editType": "calc",
          "description": "Only on date or linear y axes: snap each y value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `yperiodalignment`.",
          "valType": "any"
        },
        "yperiod0": {
          "editType": "calc",
          "description": "A period boundary for `yperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "yperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `yperiod`.",
          "valType": "enumerated"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per bar, drawn per `textposition` and shown in hover labels.",
          "valType": "string"
        },
        "textposition": {
          "values": ["inside", "outside", "auto", "none"],
          "dflt": "auto",
          "arrayOk": true,
          "editType": "calc",
          "description": "Where bar labels go: `inside` (against the bar end, see `insidetextanchor`), `outside` (past the bar end; inner bars of a stack stay inside), `auto` (inside when it fits, else outside), `none`.",
          "valType": "enumerated"
        },
        "insidetextanchor": {
          "values": ["end", "middle", "start"],
          "dflt": "end",
          "editType": "plot",
          "description": "Where inside labels sit along the bar.",
          "valType": "enumerated"
        },
        "textangle": {
          "dflt": "auto",
          "extras": ["auto"],
          "editType": "plot",
          "description": "Label rotation in degrees, clockwise. `'auto'` turns inside labels 90° when that fits the bar better.",
          "valType": "angle"
        },
        "textfont": {
          "editType": "calc",
          "description": "Font of bar labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextfont": {
          "editType": "calc",
          "description": "Font of labels inside bars. Defaults to `textfont`, with a color contrasting the bar fill.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "outsidetextfont": {
          "editType": "calc",
          "description": "Font of labels outside bars. Defaults to `textfont`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "constraintext": {
          "values": ["inside", "outside", "both", "none"],
          "dflt": "both",
          "editType": "calc",
          "description": "Shrink labels (inside, outside, or both) so they are no larger than their bar.",
          "valType": "enumerated"
        },
        "cliponaxis": {
          "dflt": true,
          "editType": "plot",
          "description": "Clip labels to the plot area. `false` is not drawn yet: labels are always clipped to the subplot.",
          "valType": "boolean"
        },
        "offset": {
          "arrayOk": true,
          "editType": "calc",
          "description": "Shift of the bar's leading edge from its position, in position-axis units, one value or one per bar. Default: centered in its (group) slot.",
          "valType": "number"
        },
        "width": {
          "min": 0,
          "arrayOk": true,
          "editType": "calc",
          "description": "Bar width in position-axis units (category slots, or ms on date axes: `86400000` is one day), one value or one per bar. Default: the slot left by `layout.bargap` and the bar mode.",
          "valType": "number"
        },
        "offsetgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces with the same offset group share one slot in `group` mode (and stack together in `stack`/`relative` modes); bars at the same position line up, also across subplots on the same position axis.",
          "valType": "string"
        },
        "alignmentgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces on the same position axis with the same alignment group split each position between their offset groups; different alignment groups lay out independently.",
          "valType": "string"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, bars draw below scatter traces (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "measure": {
          "editType": "calc",
          "description": "What each value is: `'relative'` (the default: a change added to the running total), `'total'` (a bar showing the running total; its own value is ignored) or `'absolute'` (a bar resetting the running total to its value). `'r'`, `'t'` and `'a'` work too.",
          "valType": "data_array"
        },
        "base": {
          "editType": "calc",
          "description": "Where the waterfall starts on the value axis (default 0): every bar is drawn relative to it.",
          "valType": "number"
        },
        "orientation": {
          "values": ["v", "h"],
          "editType": "calc",
          "description": "`'v'`: vertical bars at `x` positions with `y` values; `'h'`: horizontal bars at `y` positions with `x` values. Defaults to `'h'` when only `x` is given.",
          "valType": "enumerated"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for bar labels, overriding `textinfo` and `text`: `%{initial}`, `%{delta}` and `%{final}` (the running total before and after the bar, and its change), `%{label}` (position), `%{value}`, `%{x}`, `%{y}`, `%{text}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{delta:+.1f}`).",
          "valType": "string"
        },
        "textinfo": {
          "flags": ["label", "text", "initial", "delta", "final"],
          "extras": ["none"],
          "editType": "plot",
          "description": "What bar labels show, in a fixed order (label, text, initial, delta, final), one per line, formatted like the axes. Unset: `text`. Totals are computed per trace.",
          "valType": "flaglist"
        },
        "increasing": {
          "editType": "style",
          "description": "Style of rising bars (`relative` measures at or above zero).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Style of rising bars (`relative` measures at or above zero).",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of rising bars (`relative` measures at or above zero). Default `'#3D9970'`.",
              "valType": "color"
            },
            "line": {
              "editType": "style",
              "description": "Outline of rising bars (`relative` measures at or above zero).",
              "role": "object",
              "color": {
                "dflt": "#444",
                "editType": "style",
                "description": "Outline color of rising bars (`relative` measures at or above zero).",
                "valType": "color"
              },
              "width": {
                "min": 0,
                "dflt": 0,
                "editType": "style",
                "description": "Outline width in CSS px of rising bars (`relative` measures at or above zero) (centered on the edge).",
                "valType": "number"
              }
            }
          }
        },
        "decreasing": {
          "editType": "style",
          "description": "Style of falling bars (`relative` measures below zero).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Style of falling bars (`relative` measures below zero).",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of falling bars (`relative` measures below zero). Default `'#FF4136'`.",
              "valType": "color"
            },
            "line": {
              "editType": "style",
              "description": "Outline of falling bars (`relative` measures below zero).",
              "role": "object",
              "color": {
                "dflt": "#444",
                "editType": "style",
                "description": "Outline color of falling bars (`relative` measures below zero).",
                "valType": "color"
              },
              "width": {
                "min": 0,
                "dflt": 0,
                "editType": "style",
                "description": "Outline width in CSS px of falling bars (`relative` measures below zero) (centered on the edge).",
                "valType": "number"
              }
            }
          }
        },
        "totals": {
          "editType": "style",
          "description": "Style of sum bars (`total` and `absolute` measures).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Style of sum bars (`total` and `absolute` measures).",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of sum bars (`total` and `absolute` measures). Default `'#4499FF'`.",
              "valType": "color"
            },
            "line": {
              "editType": "style",
              "description": "Outline of sum bars (`total` and `absolute` measures).",
              "role": "object",
              "color": {
                "dflt": "#444",
                "editType": "style",
                "description": "Outline color of sum bars (`total` and `absolute` measures).",
                "valType": "color"
              },
              "width": {
                "min": 0,
                "dflt": 0,
                "editType": "style",
                "description": "Outline width in CSS px of sum bars (`total` and `absolute` measures) (centered on the edge).",
                "valType": "number"
              }
            }
          }
        },
        "connector": {
          "editType": "plot",
          "description": "Lines connecting each bar to the next.",
          "role": "object",
          "line": {
            "editType": "plot",
            "description": "The connector lines.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "editType": "style",
              "description": "Color of the connector lines.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 2,
              "editType": "plot",
              "description": "Width in CSS px of the connector lines.",
              "valType": "number"
            },
            "dash": {
              "dflt": "solid",
              "editType": "style",
              "description": "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
              "valType": "string"
            }
          },
          "mode": {
            "values": ["spanning", "between"],
            "dflt": "between",
            "editType": "plot",
            "description": "`'between'`: a line from each bar's end to the next bar; `'spanning'`: also across the bars' ends, so the line runs through the whole waterfall.",
            "valType": "enumerated"
          },
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the connector lines.",
            "valType": "boolean"
          }
        },
        "depth": {
          "dflt": 0,
          "editType": "plot",
          "description": "Extrusion toward the viewer (Holochart extension, 2.5D): CSS px, a percentage of each shape's width (`'60%'`), or one number per item. 0 (default) draws the trace flat. Seen in perspective with `layout.view3d`; in the flat view extruded shapes are lit from the front.",
          "valType": "any"
        },
        "bevel": {
          "editType": "plot",
          "description": "Rounded edges of extruded shapes (with `depth`).",
          "role": "object",
          "size": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Radius of the rounded front and side edges, CSS px (at most half the size).",
            "valType": "number"
          },
          "segments": {
            "min": 1,
            "max": 16,
            "dflt": 3,
            "editType": "plot",
            "description": "Segments of each rounded edge.",
            "valType": "integer"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of extruded shapes (with `depth`): Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        }
      }
    },
    "choropleth": {
      "categories": ["geo", "showLegend"],
      "meta": {
        "description": "Choropleth maps: countries, US states or the features of a GeoJSON, named by `locations`, filled with the colors of their `z` values on a map-projection subplot.",
        "docsPage": "geo",
        "plotlyEquivalent": "choropleth"
      },
      "attributes": {
        "editType": "calc",
        "description": "A choropleth map: the regions that `locations` name (countries, US states, or the features of a `geojson`) filled with the colors of their `z` values, on a map-projection subplot (`layout.geo`).",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["location", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show (the location, the value, the text and the trace name); `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "locations": {
          "editType": "calc",
          "role": "data",
          "description": "Location ids or names, one region each (see `locationmode`). A location that matches nothing is skipped, and one warning names the unmatched ones.",
          "valType": "data_array"
        },
        "locationmode": {
          "values": ["ISO-3", "USA-states", "country names", "geojson-id"],
          "dflt": "ISO-3",
          "editType": "calc",
          "description": "What the entries of `locations` name: `'ISO-3'` country codes, `'USA-states'` (two-letter codes or state names), `'country names'` (names, or ISO codes), or `'geojson-id'` for the features of `geojson`. Default `'geojson-id'` when `geojson` is given.",
          "valType": "enumerated"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "The value of each location, mapped to a color through the colorscale. A location whose value is not a number is not drawn.",
          "valType": "data_array"
        },
        "elevation": {
          "editType": "calc",
          "role": "data",
          "description": "A second value per location, drawn as height on a 3D globe (`layout.geo.projection.type: 'globe3d'`): each region rises from the sphere as a prism, the largest elevation `elevationscale` high and the others in proportion. A location whose elevation is 0, negative or not a number lies flat on the surface. A Holochart extra (Plotly has neither the globe nor this attribute); on a flat projection it is not drawn, and events and `hovertemplate` (`%{elevation}`) still carry it.",
          "valType": "data_array"
        },
        "elevationscale": {
          "min": 0,
          "dflt": 0.25,
          "editType": "plot",
          "description": "The height of the region with the largest `elevation`, in globe radii. Values above 1 are drawn as 1: the room the globe keeps above its surface. Only with `elevation`, on a 3D globe. A Holochart extra.",
          "valType": "number"
        },
        "geojson": {
          "editType": "calc",
          "description": "GeoJSON whose features `locations` refers to: a `FeatureCollection` or `Feature` with `Polygon` or `MultiPolygon` geometries, or a URL of one. Without it, the regions are the features of the base map. Rings wound the RFC 7946 way (outer rings counter-clockwise) are rewound, with one warning.",
          "valType": "any"
        },
        "featureidkey": {
          "dflt": "id",
          "editType": "calc",
          "description": "The key of the `geojson` features that `locations` are matched against, e.g. `'properties.name'`. Only with `geojson`.",
          "valType": "string"
        },
        "geo": {
          "dflt": "geo",
          "editType": "calc",
          "description": "The geo subplot this trace is drawn on: `'geo'` (`layout.geo`), `'geo2'` (`layout.geo2`), ….",
          "valType": "subplotid"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "none",
          "description": "Text per location, shown in hover labels (unless `hovertext` is set).",
          "valType": "string"
        },
        "marker": {
          "editType": "style",
          "description": "Outline and opacity of the regions.",
          "role": "object",
          "line": {
            "editType": "style",
            "description": "The outlines of the regions.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "dflt": "#444",
              "editType": "style",
              "description": "Color of the outlines of the regions, or one per location.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "arrayOk": true,
              "dflt": 1,
              "editType": "style",
              "description": "Width of the outlines of the regions in CSS px, or one per location. 0 draws none.",
              "valType": "number"
            }
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "arrayOk": true,
            "dflt": 1,
            "editType": "style",
            "description": "Opacity of the regions (multiplied by the trace `opacity`), or one per location.",
            "valType": "number"
          }
        },
        "selected": {
          "editType": "style",
          "description": "How the selected regions are drawn while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Style of the selected regions.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the selected regions. Default: `marker.opacity`.",
              "valType": "number"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "How the unselected regions are drawn while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Style of the unselected regions.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the unselected regions. Default: 0.2 × `marker.opacity` when no selected or unselected opacity is set.",
              "valType": "number"
            }
          }
        },
        "zauto": {
          "editType": "style",
          "description": "Compute the color domain from `z`. Defaults to false when both `zmin` and `zmax` are given.",
          "valType": "boolean"
        },
        "zmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `zmax`; turns `zauto` off).",
          "valType": "number"
        },
        "zmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `zmin`; turns `zauto` off).",
          "valType": "number"
        },
        "zmid": {
          "editType": "style",
          "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale for numeric `z` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
          "valType": "subplotid"
        }
      }
    },
    "scattergeo": {
      "categories": ["geo", "symbols", "showLegend", "scatter-like"],
      "meta": {
        "description": "Markers, lines along great circles, text and filled areas at longitudes and latitudes on a map-projection subplot: point maps, bubble maps, routes and regions drawn from coordinates (`fill: toself`).",
        "docsPage": "geo",
        "plotlyEquivalent": "scattergeo"
      },
      "attributes": {
        "editType": "calc",
        "description": "Markers, great-circle lines, text and filled areas at longitudes and latitudes on a map-projection subplot (`layout.geo`).",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["lon", "lat", "location", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show (the coordinates as `(lat°, lon°)`, the location, the text and the trace name); `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "lon": {
          "editType": "calc",
          "role": "data",
          "description": "Longitudes, in degrees East.",
          "valType": "data_array"
        },
        "lat": {
          "editType": "calc",
          "role": "data",
          "description": "Latitudes, in degrees North.",
          "valType": "data_array"
        },
        "locations": {
          "editType": "calc",
          "role": "data",
          "description": "Location ids or names, drawn at the centroid of each location (see `locationmode`), instead of `lon` and `lat`. A location that matches nothing is skipped, and one warning names the unmatched ones.",
          "valType": "data_array"
        },
        "locationmode": {
          "values": ["ISO-3", "USA-states", "country names", "geojson-id"],
          "dflt": "ISO-3",
          "editType": "calc",
          "description": "What the entries of `locations` name: `'ISO-3'` country codes, `'USA-states'` (two-letter codes or state names), `'country names'` (names, or ISO codes), or `'geojson-id'` for the features of `geojson`. Default `'geojson-id'` when `geojson` is given.",
          "valType": "enumerated"
        },
        "geojson": {
          "editType": "calc",
          "description": "GeoJSON whose features `locations` refers to: a `FeatureCollection` or `Feature` with `Polygon` or `MultiPolygon` geometries, or a URL of one. Without it, `locations` are matched to the features of the base map.",
          "valType": "any"
        },
        "featureidkey": {
          "dflt": "id",
          "editType": "calc",
          "description": "The key of the `geojson` features that `locations` are matched against, e.g. `'properties.name'`. Only with `geojson`.",
          "valType": "string"
        },
        "geo": {
          "dflt": "geo",
          "editType": "calc",
          "description": "The geo subplot this trace is drawn on: `'geo'` (`layout.geo`), `'geo2'` (`layout.geo2`), ….",
          "valType": "subplotid"
        },
        "mode": {
          "flags": ["lines", "markers", "text"],
          "extras": ["none"],
          "dflt": "markers",
          "editType": "calc",
          "description": "Drawing mode: markers, lines along great circles, text labels, or several.",
          "valType": "flaglist"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Text per point: the labels of `mode` `text`, and hover text (unless `hovertext` is set).",
          "valType": "string"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for the text labels, e.g. `'%{text} (%{lat:.1f}°)'` (d3-format after `:`). Keys: `lon`, `lat`, `location`, `text`, `customdata`, `marker.size`, `marker.color`, `meta`. Overrides `text`.",
          "valType": "string"
        },
        "textposition": {
          "values": [
            "top left",
            "top center",
            "top right",
            "middle left",
            "middle center",
            "middle right",
            "bottom left",
            "bottom center",
            "bottom right"
          ],
          "dflt": "middle center",
          "arrayOk": true,
          "editType": "plot",
          "description": "Where text labels sit relative to their point (and marker), or one per point.",
          "valType": "enumerated"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the text labels (`mode` `text`). Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "arrayOk": true,
            "editType": "plot",
            "description": "CSS font family of the text labels, or one per point.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per point.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per point.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight, `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "line": {
          "editType": "plot",
          "description": "Line style (`mode` `lines`). Each segment follows the great circle between its points.",
          "role": "object",
          "color": {
            "editType": "style",
            "description": "Line color. Defaults to the marker color (when a single color) or the colorway.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Line width in CSS px.",
            "valType": "number"
          },
          "dash": {
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
            "valType": "string"
          },
          "lift": {
            "min": 0,
            "dflt": 0.15,
            "editType": "plot",
            "description": "On a 3D globe (`layout.geo.projection.type: 'globe3d'`), how high each segment of the line rises above the surface in its middle: globe radii per radian of the segment's length, so a long route stands clear of the globe and a short hop stays low. 0 keeps the line on the surface. Values above 1/π (an arc to the antipode one radius high) are drawn as 1/π. The line of a filled trace (`fill: 'toself'`) stays on the surface. A Holochart extra (Plotly has neither the globe nor this attribute); ignored on a flat projection.",
            "valType": "number"
          }
        },
        "connectgaps": {
          "dflt": false,
          "editType": "plot",
          "description": "Connect lines across missing (`null`, `NaN`) points instead of breaking them.",
          "valType": "boolean"
        },
        "marker": {
          "editType": "calc",
          "description": "Marker style (`mode` `markers`).",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker fill color, one CSS color per point, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "size": {
            "min": 0,
            "dflt": 6,
            "arrayOk": true,
            "editType": "calc",
            "animatable": true,
            "description": "Marker diameter in CSS px, or one value per point (scaled by `sizeref`/`sizemode`).",
            "valType": "number"
          },
          "sizemode": {
            "values": ["diameter", "area"],
            "dflt": "diameter",
            "editType": "calc",
            "description": "How per-point `size` values become px: proportional to the diameter or to the area (bubble charts).",
            "valType": "enumerated"
          },
          "sizeref": {
            "dflt": 1,
            "editType": "calc",
            "description": "Divides per-point `size` values (bubble charts; see `sizemode`).",
            "valType": "number"
          },
          "sizemin": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Minimum radius (px) of markers with per-point `size` values.",
            "valType": "number"
          },
          "symbol": {
            "values": [
              "circle",
              0,
              "0",
              "circle-open",
              100,
              "100",
              "circle-dot",
              200,
              "200",
              "circle-open-dot",
              300,
              "300",
              "square",
              1,
              "1",
              "square-open",
              101,
              "101",
              "square-dot",
              201,
              "201",
              "square-open-dot",
              301,
              "301",
              "diamond",
              2,
              "2",
              "diamond-open",
              102,
              "102",
              "diamond-dot",
              202,
              "202",
              "diamond-open-dot",
              302,
              "302",
              "cross",
              3,
              "3",
              "cross-open",
              103,
              "103",
              "cross-dot",
              203,
              "203",
              "cross-open-dot",
              303,
              "303",
              "x",
              4,
              "4",
              "x-open",
              104,
              "104",
              "x-dot",
              204,
              "204",
              "x-open-dot",
              304,
              "304",
              "triangle-up",
              5,
              "5",
              "triangle-up-open",
              105,
              "105",
              "triangle-up-dot",
              205,
              "205",
              "triangle-up-open-dot",
              305,
              "305",
              "triangle-down",
              6,
              "6",
              "triangle-down-open",
              106,
              "106",
              "triangle-down-dot",
              206,
              "206",
              "triangle-down-open-dot",
              306,
              "306",
              "triangle-left",
              7,
              "7",
              "triangle-left-open",
              107,
              "107",
              "triangle-left-dot",
              207,
              "207",
              "triangle-left-open-dot",
              307,
              "307",
              "triangle-right",
              8,
              "8",
              "triangle-right-open",
              108,
              "108",
              "triangle-right-dot",
              208,
              "208",
              "triangle-right-open-dot",
              308,
              "308",
              "triangle-ne",
              9,
              "9",
              "triangle-ne-open",
              109,
              "109",
              "triangle-ne-dot",
              209,
              "209",
              "triangle-ne-open-dot",
              309,
              "309",
              "triangle-se",
              10,
              "10",
              "triangle-se-open",
              110,
              "110",
              "triangle-se-dot",
              210,
              "210",
              "triangle-se-open-dot",
              310,
              "310",
              "triangle-sw",
              11,
              "11",
              "triangle-sw-open",
              111,
              "111",
              "triangle-sw-dot",
              211,
              "211",
              "triangle-sw-open-dot",
              311,
              "311",
              "triangle-nw",
              12,
              "12",
              "triangle-nw-open",
              112,
              "112",
              "triangle-nw-dot",
              212,
              "212",
              "triangle-nw-open-dot",
              312,
              "312",
              "pentagon",
              13,
              "13",
              "pentagon-open",
              113,
              "113",
              "pentagon-dot",
              213,
              "213",
              "pentagon-open-dot",
              313,
              "313",
              "hexagon",
              14,
              "14",
              "hexagon-open",
              114,
              "114",
              "hexagon-dot",
              214,
              "214",
              "hexagon-open-dot",
              314,
              "314",
              "hexagon2",
              15,
              "15",
              "hexagon2-open",
              115,
              "115",
              "hexagon2-dot",
              215,
              "215",
              "hexagon2-open-dot",
              315,
              "315",
              "octagon",
              16,
              "16",
              "octagon-open",
              116,
              "116",
              "octagon-dot",
              216,
              "216",
              "octagon-open-dot",
              316,
              "316",
              "star",
              17,
              "17",
              "star-open",
              117,
              "117",
              "star-dot",
              217,
              "217",
              "star-open-dot",
              317,
              "317",
              "hexagram",
              18,
              "18",
              "hexagram-open",
              118,
              "118",
              "hexagram-dot",
              218,
              "218",
              "hexagram-open-dot",
              318,
              "318",
              "star-triangle-up",
              19,
              "19",
              "star-triangle-up-open",
              119,
              "119",
              "star-triangle-up-dot",
              219,
              "219",
              "star-triangle-up-open-dot",
              319,
              "319",
              "star-triangle-down",
              20,
              "20",
              "star-triangle-down-open",
              120,
              "120",
              "star-triangle-down-dot",
              220,
              "220",
              "star-triangle-down-open-dot",
              320,
              "320",
              "star-square",
              21,
              "21",
              "star-square-open",
              121,
              "121",
              "star-square-dot",
              221,
              "221",
              "star-square-open-dot",
              321,
              "321",
              "star-diamond",
              22,
              "22",
              "star-diamond-open",
              122,
              "122",
              "star-diamond-dot",
              222,
              "222",
              "star-diamond-open-dot",
              322,
              "322",
              "diamond-tall",
              23,
              "23",
              "diamond-tall-open",
              123,
              "123",
              "diamond-tall-dot",
              223,
              "223",
              "diamond-tall-open-dot",
              323,
              "323",
              "diamond-wide",
              24,
              "24",
              "diamond-wide-open",
              124,
              "124",
              "diamond-wide-dot",
              224,
              "224",
              "diamond-wide-open-dot",
              324,
              "324",
              "hourglass",
              25,
              "25",
              "hourglass-open",
              125,
              "125",
              "hourglass-dot",
              225,
              "225",
              "hourglass-open-dot",
              325,
              "325",
              "bowtie",
              26,
              "26",
              "bowtie-open",
              126,
              "126",
              "bowtie-dot",
              226,
              "226",
              "bowtie-open-dot",
              326,
              "326",
              "circle-cross",
              27,
              "27",
              "circle-cross-open",
              127,
              "127",
              "circle-cross-dot",
              227,
              "227",
              "circle-cross-open-dot",
              327,
              "327",
              "circle-x",
              28,
              "28",
              "circle-x-open",
              128,
              "128",
              "circle-x-dot",
              228,
              "228",
              "circle-x-open-dot",
              328,
              "328",
              "square-cross",
              29,
              "29",
              "square-cross-open",
              129,
              "129",
              "square-cross-dot",
              229,
              "229",
              "square-cross-open-dot",
              329,
              "329",
              "square-x",
              30,
              "30",
              "square-x-open",
              130,
              "130",
              "square-x-dot",
              230,
              "230",
              "square-x-open-dot",
              330,
              "330",
              "diamond-cross",
              31,
              "31",
              "diamond-cross-open",
              131,
              "131",
              "diamond-cross-dot",
              231,
              "231",
              "diamond-cross-open-dot",
              331,
              "331",
              "diamond-x",
              32,
              "32",
              "diamond-x-open",
              132,
              "132",
              "diamond-x-dot",
              232,
              "232",
              "diamond-x-open-dot",
              332,
              "332",
              "cross-thin",
              33,
              "33",
              "cross-thin-open",
              133,
              "133",
              "cross-thin-dot",
              233,
              "233",
              "cross-thin-open-dot",
              333,
              "333",
              "x-thin",
              34,
              "34",
              "x-thin-open",
              134,
              "134",
              "x-thin-dot",
              234,
              "234",
              "x-thin-open-dot",
              334,
              "334",
              "asterisk",
              35,
              "35",
              "asterisk-open",
              135,
              "135",
              "asterisk-dot",
              235,
              "235",
              "asterisk-open-dot",
              335,
              "335",
              "hash",
              36,
              "36",
              "hash-open",
              136,
              "136",
              "hash-dot",
              236,
              "236",
              "hash-open-dot",
              336,
              "336",
              "y-up",
              37,
              "37",
              "y-up-open",
              137,
              "137",
              "y-up-dot",
              237,
              "237",
              "y-up-open-dot",
              337,
              "337",
              "y-down",
              38,
              "38",
              "y-down-open",
              138,
              "138",
              "y-down-dot",
              238,
              "238",
              "y-down-open-dot",
              338,
              "338",
              "y-left",
              39,
              "39",
              "y-left-open",
              139,
              "139",
              "y-left-dot",
              239,
              "239",
              "y-left-open-dot",
              339,
              "339",
              "y-right",
              40,
              "40",
              "y-right-open",
              140,
              "140",
              "y-right-dot",
              240,
              "240",
              "y-right-open-dot",
              340,
              "340",
              "line-ew",
              41,
              "41",
              "line-ew-open",
              141,
              "141",
              "line-ew-dot",
              241,
              "241",
              "line-ew-open-dot",
              341,
              "341",
              "line-ns",
              42,
              "42",
              "line-ns-open",
              142,
              "142",
              "line-ns-dot",
              242,
              "242",
              "line-ns-open-dot",
              342,
              "342",
              "line-ne",
              43,
              "43",
              "line-ne-open",
              143,
              "143",
              "line-ne-dot",
              243,
              "243",
              "line-ne-open-dot",
              343,
              "343",
              "line-nw",
              44,
              "44",
              "line-nw-open",
              144,
              "144",
              "line-nw-dot",
              244,
              "244",
              "line-nw-open-dot",
              344,
              "344",
              "arrow-up",
              45,
              "45",
              "arrow-up-open",
              145,
              "145",
              "arrow-up-dot",
              245,
              "245",
              "arrow-up-open-dot",
              345,
              "345",
              "arrow-down",
              46,
              "46",
              "arrow-down-open",
              146,
              "146",
              "arrow-down-dot",
              246,
              "246",
              "arrow-down-open-dot",
              346,
              "346",
              "arrow-left",
              47,
              "47",
              "arrow-left-open",
              147,
              "147",
              "arrow-left-dot",
              247,
              "247",
              "arrow-left-open-dot",
              347,
              "347",
              "arrow-right",
              48,
              "48",
              "arrow-right-open",
              148,
              "148",
              "arrow-right-dot",
              248,
              "248",
              "arrow-right-open-dot",
              348,
              "348",
              "arrow-bar-up",
              49,
              "49",
              "arrow-bar-up-open",
              149,
              "149",
              "arrow-bar-up-dot",
              249,
              "249",
              "arrow-bar-up-open-dot",
              349,
              "349",
              "arrow-bar-down",
              50,
              "50",
              "arrow-bar-down-open",
              150,
              "150",
              "arrow-bar-down-dot",
              250,
              "250",
              "arrow-bar-down-open-dot",
              350,
              "350",
              "arrow-bar-left",
              51,
              "51",
              "arrow-bar-left-open",
              151,
              "151",
              "arrow-bar-left-dot",
              251,
              "251",
              "arrow-bar-left-open-dot",
              351,
              "351",
              "arrow-bar-right",
              52,
              "52",
              "arrow-bar-right-open",
              152,
              "152",
              "arrow-bar-right-dot",
              252,
              "252",
              "arrow-bar-right-open-dot",
              352,
              "352",
              "arrow",
              53,
              "53",
              "arrow-open",
              153,
              "153",
              "arrow-dot",
              253,
              "253",
              "arrow-open-dot",
              353,
              "353",
              "arrow-wide",
              54,
              "54",
              "arrow-wide-open",
              154,
              "154",
              "arrow-wide-dot",
              254,
              "254",
              "arrow-wide-open-dot",
              354,
              "354"
            ],
            "dflt": "circle",
            "arrayOk": true,
            "editType": "style",
            "description": "Marker symbol: a name (`'diamond-open'`), a Plotly numeric code, a custom symbol registered with `symbols.register` (with the same `-open` / `-dot` variants), a `'text:…'` glyph such as `'text:🚀'`, or one per point.",
            "valType": "enumerated"
          },
          "image": {
            "strict": true,
            "arrayOk": true,
            "editType": "style",
            "description": "Image sprites: a URL or data URI drawn instead of the symbol in a `size` × `size` square (keeping its aspect ratio), or one per point (empty entries keep the symbol). `opacity` applies; `color` and `line` do not. Cross-origin URLs need CORS headers.",
            "valType": "string"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker opacity (multiplied by the trace `opacity`), or one per point. Default 1, 0.7 for bubbles.",
            "valType": "number"
          },
          "angle": {
            "dflt": 0,
            "arrayOk": true,
            "editType": "style",
            "description": "Marker rotation in degrees, clockwise, or one per point.",
            "valType": "angle"
          },
          "line": {
            "editType": "style",
            "description": "Marker outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline color, one per point, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline width in CSS px, or one per point. Default 0, 1 for bubbles.",
              "valType": "number"
            }
          }
        },
        "fill": {
          "values": ["none", "toself"],
          "dflt": "none",
          "editType": "plot",
          "description": "`toself` closes the line (each run between gaps) into a shape on the sphere, filled with `fillcolor`. Of the two regions a closed path bounds, the smaller one is filled.",
          "valType": "enumerated"
        },
        "fillcolor": {
          "editType": "style",
          "description": "Fill color. Default: the line color (else the marker color, else the colorway color) at half opacity.",
          "valType": "color"
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected points while a selection is active (box/lasso select, `selectedpoints`).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected points.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Marker opacity of selected points.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Marker color of selected points.",
              "valType": "color"
            },
            "size": {
              "min": 0,
              "editType": "style",
              "description": "Marker size (px) of selected points.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of selected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of selected points.",
              "valType": "color"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected points while a selection is active (box/lasso select, `selectedpoints`).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected points.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Marker opacity of unselected points. Default: 0.2 × the marker opacity when no selected/unselected opacity is set.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Marker color of unselected points.",
              "valType": "color"
            },
            "size": {
              "min": 0,
              "editType": "style",
              "description": "Marker size (px) of unselected points.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of unselected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of unselected points.",
              "valType": "color"
            }
          }
        }
      }
    },
    "chord": {
      "categories": ["domain", "noOpacity", "showLegend", "pie-like"],
      "meta": {
        "description": "Chord diagram: nodes as arcs of a ring sized by their flow and links as ribbons between them, from `node` / `link` or a square matrix; directed ribbons with arrowheads, groups with an outer ring, hover highlighting.",
        "docsPage": "chord"
      },
      "attributes": {
        "description": "Chord diagram: nodes as arcs of a ring, as wide as their flow, and links as ribbons between them; from `node` / `link` (as sankey and graph take them) or from a square matrix.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": [],
          "extras": ["all", "none", "skip"],
          "dflt": "all",
          "editType": "none",
          "description": "Hover of nodes and links: labels (`'all'`), highlighting without labels (`'none'`) or no hover at all (`'skip'`). The default of `node.hoverinfo` and `link.hoverinfo`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "matrix": {
          "editType": "calc",
          "role": "data",
          "description": "The flows as a square matrix, instead of `link`: `matrix[i][j]` is the flow from node `i` to node `j`. Directed (the default), every positive cell is a ribbon. With `directed: false` every pair of nodes has one ribbon, `matrix[i][j]` wide at `i` and `matrix[j][i]` wide at `j` (a symmetric matrix gives ribbons as wide at both ends). Missing cells are 0; negative and non-numeric cells are left out and counted in the description. Ignored when `link.source` and `link.target` are given.",
          "valType": "data_array"
        },
        "labels": {
          "editType": "calc",
          "role": "data",
          "description": "Node labels, one per row of `matrix`. The default of `node.label`, which wins when both are given.",
          "valType": "data_array"
        },
        "directed": {
          "dflt": true,
          "editType": "calc",
          "description": "Whether a link has a direction. Every link takes its value of its source arc and of its target arc, so an arc is as wide as the outgoing plus the incoming flow of its node, directed or not. Directed links can end in an arrowhead (`link.arrowlen`) or short of the ring (`link.targetgap`), and hover labels tell outgoing from incoming flow; undirected links are one symmetric band. See `matrix` for how a matrix is read.",
          "valType": "boolean"
        },
        "sort": {
          "values": ["input", "value", "group"],
          "dflt": "input",
          "editType": "calc",
          "description": "Order of the arcs around the ring. `'input'`: by node index. `'value'`: widest first. `'group'`: groups by name (numbers by value), nodes by index. With `node.group` the nodes of a group are always next to each other: `'input'` then orders the groups by their first node and `'value'` by their width.",
          "valType": "enumerated"
        },
        "rotation": {
          "dflt": 0,
          "editType": "calc",
          "description": "Where the first arc starts, in degrees clockwise from 12 o'clock.",
          "valType": "angle"
        },
        "direction": {
          "values": ["clockwise", "counterclockwise"],
          "dflt": "clockwise",
          "editType": "calc",
          "description": "Direction in which the arcs follow each other.",
          "valType": "enumerated"
        },
        "padangle": {
          "min": 0,
          "dflt": 2,
          "editType": "calc",
          "description": "Gap between neighbouring arcs, in degrees. The gaps take at most half the ring: more is scaled down.",
          "valType": "number"
        },
        "textorientation": {
          "values": ["auto", "radial", "tangential", "none"],
          "dflt": "auto",
          "editType": "plot",
          "description": "Node labels, outside the ring. `'radial'`: along the radius, reading away from the center on the right half and towards it on the left, so no label is upside down. `'tangential'`: across the radius, flipped on the lower half. `'auto'`: tangential when every label fits along its arc, else radial. `'none'`: no labels (they still show in hover labels). A label that does not fit its arc is not drawn; a radial label too long for the room around the ring is cut with an ellipsis.",
          "valType": "enumerated"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the node labels. Default: `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "editType": "plot",
            "description": "Font size in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "plot",
            "description": "Text color. Default: `layout.font.color`.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          },
          "shadow": {
            "dflt": "none",
            "editType": "plot",
            "description": "CSS `text-shadow` (first shadow only), `'none'` (the default), or `'auto'`: a thin halo in the text's contrast color.",
            "valType": "string"
          }
        },
        "valueformat": {
          "dflt": ",.4~g",
          "editType": "none",
          "description": "d3-format of the node and link values in hover labels (`%{value}`).",
          "valType": "string"
        },
        "valuesuffix": {
          "dflt": "",
          "editType": "none",
          "description": "Text after the values in hover labels (a unit such as `GWh`).",
          "valType": "string"
        },
        "node": {
          "editType": "calc",
          "description": "The nodes: arcs of the ring.",
          "role": "object",
          "label": {
            "editType": "calc",
            "role": "data",
            "description": "Node labels, one per node index (Plotly pseudo-HTML allowed): drawn around the ring and shown in hover labels and in the legend.",
            "valType": "data_array"
          },
          "group": {
            "editType": "calc",
            "description": "A group per node (a name or a number; empty for none). The nodes of a group are next to each other on the ring and take the color of the group, an outer ring draws one labeled arc per group (see `groups`), and the legend lists the groups instead of the nodes.",
            "valType": "data_array"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Node color, or one per node index. Default: the colorway, one color per node, or one per group when `node.group` is given.",
            "valType": "color"
          },
          "customdata": {
            "editType": "calc",
            "description": "Extra data per node for `%{customdata}` and events.",
            "valType": "data_array"
          },
          "thickness": {
            "min": 1,
            "dflt": 12,
            "editType": "plot",
            "description": "Thickness of the ring of node arcs, in CSS px.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "Outlines of the node arcs.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color of the node arcs, or one per node. Default: the paper color.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width of the node arcs in CSS px, or one per node.",
              "valType": "number"
            }
          },
          "hoverinfo": {
            "values": ["all", "none", "skip"],
            "dflt": "all",
            "editType": "none",
            "description": "Hover of the node arcs: labels (`'all'`), highlighting without labels (`'none'`) or no hover and no events (`'skip'`). Default: the trace `hoverinfo`.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the node hover labels: `%{label}`, `%{value}` (the width of the arc: outgoing plus incoming flow, formatted with `valueformat` and `valuesuffix`), `%{out}`, `%{in}`, `%{percent}` (share of the ring), `%{group}`, `%{color}`, `%{customdata}`. `<extra>…</extra>` replaces the value box.",
            "valType": "string"
          }
        },
        "link": {
          "editType": "calc",
          "description": "The links: ribbons between the arcs.",
          "role": "object",
          "source": {
            "editType": "calc",
            "role": "data",
            "description": "Source node index of every link.",
            "valType": "data_array"
          },
          "target": {
            "editType": "calc",
            "role": "data",
            "description": "Target node index of every link. A link from a node to itself is drawn as a hill on its arc and takes its value of the arc once. A link whose source or target is not a node index is left out and counted in the description.",
            "valType": "data_array"
          },
          "value": {
            "editType": "calc",
            "role": "data",
            "description": "Flow of every link, which sets the width of its ribbon at both ends. Default: 1 for every link. When given, links without a positive value are left out and counted in the description.",
            "valType": "data_array"
          },
          "label": {
            "editType": "calc",
            "description": "Link labels, shown in hover labels.",
            "valType": "data_array"
          },
          "customdata": {
            "editType": "calc",
            "description": "Extra data per link for `%{customdata}` and events.",
            "valType": "data_array"
          },
          "sort": {
            "values": ["position", "value", "input"],
            "dflt": "position",
            "editType": "calc",
            "description": "Order of the ribbon ends within an arc. `'position'`: by where the other end of each ribbon is on the ring, which crosses the ribbons as little as possible. `'value'`: widest first. `'input'`: by link index.",
            "valType": "enumerated"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Ribbon color, or one per link. Default: the color of a node of the link (`link.colorsource`).",
            "valType": "color"
          },
          "colorsource": {
            "values": ["source", "target", "gradient"],
            "dflt": "source",
            "editType": "style",
            "description": "Which node a ribbon without a `link.color` takes its color from: its `'source'`, its `'target'`, or both (`'gradient'`: from the source's color at one end to the target's at the other, in steps along the ribbon).",
            "valType": "enumerated"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 0.6,
            "editType": "style",
            "description": "Opacity of the ribbons (multiplies their color's own).",
            "valType": "number"
          },
          "hovercolor": {
            "arrayOk": true,
            "editType": "style",
            "description": "Ribbon color while it (or a node it connects) is hovered, or one per link. Default: the ribbon color, a quarter more opaque. The other ribbons are dimmed meanwhile.",
            "valType": "color"
          },
          "gap": {
            "min": 0,
            "dflt": 2,
            "editType": "plot",
            "description": "Space between the ring and the ends of the ribbons, in CSS px.",
            "valType": "number"
          },
          "targetgap": {
            "min": 0,
            "editType": "plot",
            "description": "With `directed`: space between the ring and the target end of the ribbons, in CSS px. A larger gap than `link.gap` shows the direction: ribbons touch their source and stop short of their target. Default: `link.gap`.",
            "valType": "number"
          },
          "arrowlen": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "With `directed`: length of the arrowhead the target end of every ribbon is drawn as, in CSS px; 0 draws the ends flat.",
            "valType": "number"
          },
          "hoverinfo": {
            "values": ["all", "none", "skip"],
            "dflt": "all",
            "editType": "none",
            "description": "Hover of the ribbons: labels (`'all'`), highlighting without labels (`'none'`) or no hover and no events (`'skip'`). Default: the trace `hoverinfo`.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the link hover labels: `%{label}`, `%{value}` (formatted with `valueformat` and `valuesuffix`), `%{reverse}` (the flow back, for a pair of matrix cells drawn as one ribbon), `%{percent}` (share of the total flow), `%{source.label}`, `%{target.label}`, `%{color}`, `%{customdata}`. `<extra>…</extra>` replaces the value box.",
            "valType": "string"
          }
        },
        "groups": {
          "editType": "calc",
          "description": "The outer ring of `node.group`: one arc around the nodes of every group, with its name.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Whether the outer ring of group arcs is drawn.",
            "valType": "boolean"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Color of the group arcs, or one per group in order of first appearance in `node.group`. Default: the colorway, one color per group.",
            "valType": "color"
          },
          "thickness": {
            "min": 1,
            "dflt": 8,
            "editType": "plot",
            "description": "Thickness of the ring of group arcs, in CSS px.",
            "valType": "number"
          },
          "gap": {
            "min": 0,
            "dflt": 4,
            "editType": "plot",
            "description": "Space between the node labels (the node ring, without labels) and the ring of group arcs, in CSS px.",
            "valType": "number"
          },
          "padangle": {
            "min": 0,
            "editType": "calc",
            "description": "Gap between the last arc of a group and the first arc of the next, in degrees. Default: twice `padangle`.",
            "valType": "number"
          },
          "textfont": {
            "editType": "plot",
            "description": "Font of the group labels, drawn across the radius outside the group arcs. Default: `textfont`, bold.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "plot",
              "description": "CSS font-family list. Default: `layout.font.family`.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "plot",
              "description": "Font size in CSS px.",
              "valType": "number"
            },
            "color": {
              "editType": "plot",
              "description": "Text color. Default: `layout.font.color`.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "plot",
              "description": "Font style.",
              "valType": "enumerated"
            },
            "shadow": {
              "dflt": "none",
              "editType": "plot",
              "description": "CSS `text-shadow` (first shadow only), `'none'` (the default), or `'auto'`: a thin halo in the text's contrast color.",
              "valType": "string"
            }
          }
        }
      }
    },
    "graph": {
      "categories": ["cartesian", "symbols", "showLegend", "pie-like"],
      "meta": {
        "description": "Network graph: nodes and the links between them, at given positions or placed by a layout (`arrangement`: force-directed, layered with box nodes and routed links, tidy and radial trees that fold on a click, a dendrogram, an arc diagram, a hive plot); arrowheads, curved parallel links and loops, labels culled where they collide, colors by group or by value; every part is one GPU draw call regardless of the size of the graph. For large graphs: layouts off the main thread, drawn while they settle (`worker`), level of detail that follows the zoom (`lod`) and link bundling (`link.bundle`).",
        "docsPage": "graph"
      },
      "attributes": {
        "description": "Network graph: nodes and the links between them, at given positions or placed by a layout.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": [],
          "extras": ["all", "none", "skip"],
          "dflt": "all",
          "editType": "none",
          "description": "Hover of nodes and links: labels (`'all'`), events without labels (`'none'`) or no hover at all (`'skip'`). The default of `node.hoverinfo` and `link.hoverinfo`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "arrangement": {
          "values": [
            "preset",
            "force",
            "layered",
            "tree",
            "radial",
            "dendrogram",
            "circular",
            "grid",
            "arc",
            "hive",
            "custom"
          ],
          "editType": "calc",
          "description": "The layout that places the nodes. `'preset'`: at `node.x` / `node.y`, which are data on the trace's axes. `'force'`: a force-directed layout, linked nodes pulled together and all nodes pushed apart (options: `force`). `'layered'`: a layered drawing of a directed graph, every link pointing the same way (pipelines, dependencies, state machines; options: `layered`). `'tree'`: a tidy tree; `'radial'`: the same tree on rings around its root; `'dendrogram'`: a tree with its leaves on one line and every other node at the height `node.value` gives it (options of the three: `tree`). `'circular'`: evenly on a circle, the nodes of a group next to each other. `'grid'`: in rows. `'arc'`: an arc diagram, the nodes on a line and the links as arcs over it (options: `arc`). `'hive'`: a hive plot, the nodes on a few axes around a center (options: `hive`). `'custom'`: the layout named by `custom.name`. Every arrangement but `'preset'` hides the axes and gives them one scale, with two exceptions: a dendrogram with `node.value` shows the axis of its heights, and a `'force'` graph whose nodes all have an `x` and no `y` (or the reverse) keeps them at those values on a visible axis and moves them along the other one only (a timeline). Default: `'preset'` when every node has an `x` and a `y`, else `'force'`.",
          "valType": "enumerated"
        },
        "custom": {
          "editType": "calc",
          "description": "The layout of `arrangement: 'custom'`.",
          "role": "object",
          "name": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "With `arrangement: 'custom'`: the name of a layout registered with `registerGraphLayout(name, layout)`.",
            "valType": "string"
          },
          "options": {
            "editType": "calc",
            "description": "Passed to the custom layout as its second argument, as it is.",
            "valType": "any"
          }
        },
        "worker": {
          "values": ["auto", true, false],
          "dflt": false,
          "editType": "calc",
          "description": "Where the layout is computed. `false`: with the rest of the figure, on the main thread; the chart is drawn once, laid out, and the page waits until then (a `'force'` layout of 10,000 nodes takes a second or more). `true`: off the main thread, in the package's layout worker. The chart is drawn at once, a `'force'` layout with the nodes moving to their places as the worker reports them, any other with its nodes on a circle until the layout arrives; the axes are fitted to the result when it is there, `chart.ready` and the promise of the update resolve then, and an image export waits for it. The result is the same picture as with `false`. `'auto'`: off the main thread where the wait would be felt: a `'force'` layout of at least 1,000 nodes or 5,000 links, a `'layered'` one of at least 3,000 nodes or 6,000 links, and force-directed link bundling (`link.bundle`) of at least 1,000 links. Never in the worker: `'preset'`, `'circular'`, `'grid'` and `'custom'` (a registered layout is a function of the page), a timeline or a dendrogram with a real axis, and `force.start` at rest. Hover and selection answer for what is on screen while the nodes move; nodes are dragged once the layout is there. Where no worker can be started (no `Worker`, a Content Security Policy, a bundler that left the file out) the same code runs on the main thread in slices of a few milliseconds, with one warning. Default: `config.worker`, which is `false`.",
          "valType": "enumerated"
        },
        "lod": {
          "values": ["auto", true, false],
          "dflt": "auto",
          "editType": "plot",
          "description": "Level of detail: what a large graph leaves out while it is drawn small. `'auto'`: for a graph of more than 3,000 nodes or 5,000 links; `true`: for any graph; `false`: never. With it, node labels are drawn once the nodes are 24 px apart on average, and arrowheads once the links are 24 px long on average (they go again below 18 px, so a zoom at the threshold does not make them flicker); neither is built before. Nodes are drawn smaller where they are closer together than one and a half times their size, down to dots of 1.5 px, and lose their outlines below 4 px. Links fade as they cover more of the plot, so that a dense graph stays a texture instead of a block of one color, and come back to `link.opacity` on a zoom into it. What a hover or a selection highlights is drawn in full.",
          "valType": "enumerated"
        },
        "force": {
          "editType": "calc",
          "description": "Options of `arrangement: 'force'`. Lengths are layout units: CSS px at the size the graph is laid out for, before it is fitted to the plot area.",
          "role": "object",
          "algorithm": {
            "values": ["spring", "forceatlas2"],
            "dflt": "spring",
            "editType": "calc",
            "description": "The model of the simulation. `'spring'`: links are springs with a rest length and every two nodes repel (the d3-force model); even link lengths, the usual choice. `'forceatlas2'`: links pull in proportion to their length and nodes repel in proportion to their degrees (ForceAtlas2); it pulls communities apart better in graphs with hubs.",
            "valType": "enumerated"
          },
          "simulate": {
            "dflt": false,
            "editType": "plot",
            "description": "Show the layout settling: the nodes start in a spiral and the chart draws the simulation as it cools, a few steps per frame, ending on the same picture as without it. The axes are sized for the settled layout from the start. It runs again when something the layout reads changes (the nodes, the links, their sizes, these options), not on a change of style. Without motion (`prefers-reduced-motion`, `config.a11y.reducedMotion`), on a static plot (an image export) and for graphs of more than 2,000 nodes or 10,000 links the settled layout is drawn at once. When the layout runs off the main thread (`worker`), the positions the worker reports are what is shown, as fast as they come: nothing is replayed afterwards, and `simulate` then only says whether a dragged node pushes the others aside.",
            "valType": "boolean"
          },
          "seed": {
            "min": 0,
            "dflt": 1,
            "editType": "calc",
            "description": "Seed of the generator that separates nodes at the same place. The layout is deterministic: the same figure gives the same positions everywhere; another seed gives another, equally valid, layout of graphs that have such nodes.",
            "valType": "integer"
          },
          "ticks": {
            "min": 1,
            "editType": "calc",
            "description": "Steps of the simulation from its start to rest; the cooling is spread over them. More steps untangle a graph better and take longer. Default: 600 up to 500 nodes, fewer for larger graphs (300 from 1,000 to 3,000 nodes, 90 at 10,000).",
            "valType": "integer"
          },
          "linkdistance": {
            "min": 0,
            "dflt": 30,
            "editType": "calc",
            "description": "`'spring'`: the rest length of a link, in layout units (CSS px before the graph is fitted to the plot area). Links end up longer where the repulsion of their nodes stretches them.",
            "valType": "number"
          },
          "linkstrength": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "`'spring'`: how hard a link pulls its nodes to its rest length, 0 to 1. Default: per link, 1 / the smaller degree of its two nodes, so that the links of a hub do not crush its neighbours onto it.",
            "valType": "number"
          },
          "linkweight": {
            "values": ["strength", "distance", "none"],
            "dflt": "strength",
            "editType": "calc",
            "description": "What `link.value` does to a link: `'strength'`: a larger value pulls harder; `'distance'`: a larger value makes the link shorter (`'spring'` only; as `'strength'` for `'forceatlas2'`); `'none'`: nothing.",
            "valType": "enumerated"
          },
          "charge": {
            "dflt": -60,
            "editType": "calc",
            "description": "`'spring'`: the strength of the force between every two nodes: negative values push them apart (the more negative, the larger and more open the layout), positive ones pull them together.",
            "valType": "number"
          },
          "gravity": {
            "min": 0,
            "editType": "calc",
            "description": "The pull toward the center, which keeps the parts of a graph that are not linked from drifting apart. `'spring'`: each connected part is pulled as a whole (default 0.05). `'forceatlas2'`: every node is pulled, the more links it has the harder (default 1).",
            "valType": "number"
          },
          "collide": {
            "dflt": true,
            "editType": "calc",
            "description": "Keep nodes from overlapping, each taken as a circle around its marker or box.",
            "valType": "boolean"
          },
          "collidepadding": {
            "min": 0,
            "dflt": 2,
            "editType": "calc",
            "description": "With `collide`: the room left between two nodes, in layout units.",
            "valType": "number"
          },
          "groupstrength": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "The pull of every node toward the middle of its group (`node.group`), which keeps the nodes of a group together even where the links do not. 0.05 to 0.3 are usual values.",
            "valType": "number"
          },
          "scalingratio": {
            "min": 0,
            "editType": "calc",
            "description": "`'forceatlas2'`: the repulsion between nodes; a larger value gives a larger, more open layout. Default: 10, or 1 with `linlog`.",
            "valType": "number"
          },
          "linlog": {
            "dflt": false,
            "editType": "calc",
            "description": "`'forceatlas2'`: links pull with the logarithm of their length instead of the length: tighter and better separated clusters.",
            "valType": "boolean"
          },
          "start": {
            "editType": "calc",
            "description": "A picture the layout goes on from, in place of the spiral: where every node is, and how warm the layout still is there. Pinned nodes (`node.x` and `node.y`) are where those say; the layout is centered on the middle of these positions and not moved afterwards. The chart writes it when a node is dragged, so that the figure is the picture on screen: at rest (`alpha: 0`) on a drop, with `alpha: 0.3` when a pinned node is released, and once more at rest when a layout shown with `force.simulate` has settled. While it is at rest the other `force` options change nothing: unset it to lay the graph out afresh.",
            "role": "object",
            "x": {
              "editType": "calc",
              "description": "Where each node is along x, in layout units; a node without a number starts in the spiral.",
              "valType": "data_array"
            },
            "y": {
              "editType": "calc",
              "description": "Where each node is along y (see `force.start.x`).",
              "valType": "data_array"
            },
            "alpha": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "calc",
              "description": "How warm the layout still is at these positions. 0: at rest: the positions are the layout, and nothing is simulated. Above 0 the simulation goes on from them, cooling from this value at the rate of a full run, so 0.3 moves the nodes about a little and 1 is a full run.",
              "valType": "number"
            }
          }
        },
        "layered": {
          "editType": "calc",
          "description": "Options of `arrangement: 'layered'`. Lengths are layout units: CSS px at the size the graph is laid out for, before it is fitted to the plot area.",
          "role": "object",
          "rankdir": {
            "values": ["TB", "BT", "LR", "RL"],
            "dflt": "TB",
            "editType": "calc",
            "description": "The direction the links point in: top to bottom (`'TB'`), bottom to top (`'BT'`), left to right (`'LR'`) or right to left (`'RL'`).",
            "valType": "enumerated"
          },
          "ranksep": {
            "min": 0,
            "dflt": 50,
            "editType": "calc",
            "description": "Free space between two layers, in layout units.",
            "valType": "number"
          },
          "nodesep": {
            "min": 0,
            "dflt": 30,
            "editType": "calc",
            "description": "Free space between two nodes of a layer, in layout units.",
            "valType": "number"
          },
          "edgesep": {
            "min": 0,
            "dflt": 12,
            "editType": "calc",
            "description": "Free space between two long links that cross a layer side by side, in layout units.",
            "valType": "number"
          },
          "ranker": {
            "values": ["network-simplex", "tight-tree", "longest-path"],
            "dflt": "network-simplex",
            "editType": "calc",
            "description": "How nodes get their layer. `'network-simplex'`: the layers that make the links shortest in total. `'tight-tree'`: its starting point, faster and nearly as short. `'longest-path'`: every node as early as its links allow, the fastest, with longer links.",
            "valType": "enumerated"
          },
          "routing": {
            "values": ["spline", "polyline", "orthogonal"],
            "dflt": "spline",
            "editType": "calc",
            "description": "The shape of the links: smooth curves (`'spline'`), straight segments through the same points (`'polyline'`) or horizontal and vertical segments (`'orthogonal'`).",
            "valType": "enumerated"
          },
          "clusters": {
            "dflt": false,
            "editType": "calc",
            "description": "Keep the nodes of a group (`node.group`) together and draw a frame around each group, tinted in its color, with its name at the top.",
            "valType": "boolean"
          },
          "clusterpadding": {
            "min": 0,
            "dflt": 12,
            "editType": "calc",
            "description": "With `clusters`: the space between a frame and its nodes, in layout units.",
            "valType": "number"
          },
          "aspect": {
            "min": 0.05,
            "editType": "calc",
            "description": "Width over height that the parts of a graph that are not linked to each other are packed into. Default: the proportions of the plot area.",
            "valType": "number"
          }
        },
        "tree": {
          "editType": "calc",
          "description": "Options of the tree arrangements: `'tree'`, `'radial'` and `'dendrogram'`. The tree is the one `parents` gives; with `link.source` / `link.target`, each node hangs from the first node that links to it, starting at the nodes without incoming links, and the links left over are drawn in the `link.secondary` style. Lengths are layout units: CSS px at the size the graph is laid out for, before it is fitted to the plot area.",
          "role": "object",
          "orientation": {
            "values": ["TB", "BT", "LR", "RL"],
            "editType": "calc",
            "description": "`'tree'` and `'dendrogram'`: where the root is and which way the tree grows: `'TB'` (root at the top), `'BT'`, `'LR'` (root on the left) or `'RL'`. Default: `'LR'` for a tree, whose labels then read along the levels, and `'TB'` for a dendrogram, whose heights are then on the y axis.",
            "valType": "enumerated"
          },
          "links": {
            "values": ["straight", "curved", "elbow"],
            "editType": "calc",
            "description": "The shape of the tree's links: straight lines, S-shaped curves (`'curved'`) or right angles (`'elbow'`; in a `'radial'` tree, along the rings). Default: `'curved'`, and `'elbow'` for a dendrogram, which has no curves.",
            "valType": "enumerated"
          },
          "nodesep": {
            "min": 0,
            "editType": "calc",
            "description": "Room between two neighbours on a level (on a ring for `'radial'`; between two leaves for `'dendrogram'`), on top of their sizes and of their labels, in layout units. Default: 10, or 20 for box nodes.",
            "valType": "number"
          },
          "subtreesep": {
            "min": 0,
            "editType": "calc",
            "description": "`'tree'` and `'radial'`: room between two neighbours that have different parents. Default: `nodesep`.",
            "valType": "number"
          },
          "ranksep": {
            "min": 0,
            "editType": "calc",
            "description": "Room between two levels (two rings for `'radial'`), in layout units; a dendrogram without `node.value` has levels this far apart. Default: 50, plus room for the labels that are drawn between the levels.",
            "valType": "number"
          },
          "sector": {
            "editType": "calc",
            "description": "`'radial'`: the part of the circle the tree fans out over.",
            "role": "object",
            "start": {
              "dflt": 0,
              "editType": "calc",
              "description": "Angle at which the tree begins, in degrees counter-clockwise from 3 o'clock.",
              "valType": "number"
            },
            "span": {
              "min": -360,
              "max": 360,
              "dflt": 360,
              "editType": "calc",
              "description": "How far around the tree goes, in degrees; negative values run clockwise. 180 is a half circle.",
              "valType": "number"
            }
          },
          "sort": {
            "values": ["input", "size", "value"],
            "dflt": "input",
            "editType": "calc",
            "description": "The order of the children of a node: as given (`'input'`), by the number of nodes below them (`'size'`) or by `node.value`.",
            "valType": "enumerated"
          },
          "sortorder": {
            "values": ["descending", "ascending"],
            "dflt": "descending",
            "editType": "calc",
            "description": "Which way `sort: 'size'` and `'value'` order: largest first, or smallest first.",
            "valType": "enumerated"
          },
          "collapsed": {
            "editType": "calc",
            "description": "The nodes whose subtrees are folded away, as node indices; with tree input (`parents`), ids (`ids`, else `labels`) work too. The nodes below a collapsed node are not drawn and take no room, and the node gets a ring that says it holds something. A click on a node that has children adds it to this list or removes it (see `collapsible`).",
            "valType": "data_array"
          },
          "collapsible": {
            "dflt": true,
            "editType": "plot",
            "description": "A click on a node that has children folds its subtree away, and a second click unfolds it. The chart then updates `tree.collapsed` itself and emits `restyle`, as for any change made on the chart, and the tree moves to its new shape (at once without motion: `prefers-reduced-motion`, `config.a11y.reducedMotion`).",
            "valType": "boolean"
          }
        },
        "arc": {
          "editType": "calc",
          "description": "Options of `arrangement: 'arc'`. Lengths are layout units: CSS px at the size the graph is laid out for, before it is fitted to the plot area.",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "h",
            "editType": "calc",
            "description": "The direction of the line the nodes sit on: horizontal (`'h'`, first node on the left) or vertical (`'v'`, first node at the top).",
            "valType": "enumerated"
          },
          "order": {
            "values": ["input", "group", "degree", "barycenter"],
            "editType": "calc",
            "description": "The order of the nodes along the line, which is what an arc diagram shows. `'input'`: as given. `'group'`: by `node.group`. `'degree'`: most links first. `'barycenter'`: the given order improved so that linked nodes are close and the arcs short. Default: `'group'` when the nodes have groups, else `'input'`.",
            "valType": "enumerated"
          },
          "nodesep": {
            "min": 0,
            "dflt": 20,
            "editType": "calc",
            "description": "Space between two neighbours on the line, in layout units.",
            "valType": "number"
          },
          "groupsep": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "With `order: 'group'`: extra space where the group changes.",
            "valType": "number"
          },
          "sides": {
            "values": ["above", "below", "direction"],
            "dflt": "above",
            "editType": "calc",
            "description": "The side of the line the arcs are on: `'above'` (to the right of a vertical line), `'below'`, or `'direction'`: above for a link that points forward along the line and below for one that points back.",
            "valType": "enumerated"
          },
          "maxheight": {
            "min": 0,
            "editType": "calc",
            "description": "How far an arc may rise from the line, in layout units: longer arcs are flattened to this height. Default: no limit (half circles).",
            "valType": "number"
          },
          "loopsize": {
            "min": 0,
            "dflt": 12,
            "editType": "calc",
            "description": "How far the loop of a link from a node to itself rises beyond the node's edge.",
            "valType": "number"
          }
        },
        "hive": {
          "editType": "calc",
          "description": "Options of `arrangement: 'hive'`. A link between two nodes of one axis is not drawn: a hive plot shows what goes on between the axes.",
          "role": "object",
          "axes": {
            "min": 1,
            "max": 360,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of axes when the nodes have no groups (with `node.group` there is one axis per group, with the group's name at its end) and `assign` is `'degree'`.",
            "valType": "integer"
          },
          "assign": {
            "values": ["degree", "direction"],
            "dflt": "degree",
            "editType": "calc",
            "description": "How nodes without groups get their axis. `'degree'`: sorted by their number of links and cut into `axes` equal parts. `'direction'`: three axes, for the nodes that only have outgoing links, those in between, and those that only have incoming links.",
            "valType": "enumerated"
          },
          "startangle": {
            "dflt": 90,
            "editType": "calc",
            "description": "Angle of the first axis in degrees, counter-clockwise from 3 o'clock. The others follow counter-clockwise, evenly spaced.",
            "valType": "number"
          },
          "innerradius": {
            "min": 0,
            "dflt": 40,
            "editType": "calc",
            "description": "Distance from the center to the first node of an axis, in layout units.",
            "valType": "number"
          },
          "outerradius": {
            "min": 0,
            "dflt": 300,
            "editType": "calc",
            "description": "Distance from the center to the last node of an axis, in layout units.",
            "valType": "number"
          },
          "position": {
            "values": ["degree", "value"],
            "dflt": "degree",
            "editType": "calc",
            "description": "What places a node along its axis: its rank by number of links among the nodes of the axis (`'degree'`, the least linked nearest the center) or `node.value`, on one scale for all axes.",
            "valType": "enumerated"
          }
        },
        "labels": {
          "editType": "calc",
          "role": "data",
          "description": "Tree input, as the hierarchical traces take it: the label of every node. With `parents` (and no `link.source`), every node with a parent gets a link from its parent. The default of `node.label`.",
          "valType": "data_array"
        },
        "parents": {
          "editType": "calc",
          "role": "data",
          "description": "Tree input: the parent of every node, as its id (`ids`, else `labels`); `''` for a root. A parent that is no node becomes a node of its own, after the others.",
          "valType": "data_array"
        },
        "node": {
          "editType": "calc",
          "description": "The nodes.",
          "role": "object",
          "label": {
            "editType": "calc",
            "role": "data",
            "description": "Node labels, one per node index: drawn next to the node (see `node.textposition`) and shown in hover labels. Where labels would overlap, the nodes with the most links keep theirs; the others appear when zooming in.",
            "valType": "data_array"
          },
          "x": {
            "editType": "calc",
            "description": "Node x positions. With `arrangement: 'preset'` they are data on the x axis (numbers, dates or categories by the axis type) and a node without one is not drawn. Under `'force'` a node that has both `x` and `y` is pinned there (in layout units: CSS px at the size the graph is laid out for) and the others arrange themselves around it; when every node has an `x` and none has a `y`, the x axis is a real axis, shown, on which every node keeps its value while the layout moves it along y only. The other arrangements place every node themselves.",
            "valType": "data_array"
          },
          "y": {
            "editType": "calc",
            "description": "Node y positions (see `node.x`).",
            "valType": "data_array"
          },
          "size": {
            "min": 0,
            "dflt": 10,
            "arrayOk": true,
            "editType": "calc",
            "description": "Node diameter in CSS px, or one per node. Ignored with `node.sizeby` and for box nodes. Default: 10, and 6 in a `'dendrogram'`, whose nodes are points on a scale.",
            "valType": "number"
          },
          "sizeby": {
            "values": ["none", "degree", "indegree", "outdegree"],
            "dflt": "none",
            "editType": "calc",
            "description": "Size nodes by their links instead of `node.size`: `'degree'` (all links at the node), `'indegree'` (links that end at it) or `'outdegree'` (links that start at it). The area grows with the count, between the two diameters of `node.sizerange`.",
            "valType": "enumerated"
          },
          "sizerange": {
            "items": [
              {
                "min": 0,
                "editType": "calc",
                "valType": "number"
              },
              {
                "min": 0,
                "editType": "calc",
                "valType": "number"
              }
            ],
            "dflt": [6, 30],
            "editType": "calc",
            "description": "With `node.sizeby`: the diameters in CSS px of a node without links and of the node with the most.",
            "valType": "info_array"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Node color, one CSS color per node, or numbers mapped through `colorscale` (with a colorbar when `showscale` is on). Default: the group's color when `node.group` is given (the colorway, one color per group), else the trace's colorway color.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `node.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `node.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "symbol": {
            "values": [
              "circle",
              0,
              "0",
              "circle-open",
              100,
              "100",
              "circle-dot",
              200,
              "200",
              "circle-open-dot",
              300,
              "300",
              "square",
              1,
              "1",
              "square-open",
              101,
              "101",
              "square-dot",
              201,
              "201",
              "square-open-dot",
              301,
              "301",
              "diamond",
              2,
              "2",
              "diamond-open",
              102,
              "102",
              "diamond-dot",
              202,
              "202",
              "diamond-open-dot",
              302,
              "302",
              "cross",
              3,
              "3",
              "cross-open",
              103,
              "103",
              "cross-dot",
              203,
              "203",
              "cross-open-dot",
              303,
              "303",
              "x",
              4,
              "4",
              "x-open",
              104,
              "104",
              "x-dot",
              204,
              "204",
              "x-open-dot",
              304,
              "304",
              "triangle-up",
              5,
              "5",
              "triangle-up-open",
              105,
              "105",
              "triangle-up-dot",
              205,
              "205",
              "triangle-up-open-dot",
              305,
              "305",
              "triangle-down",
              6,
              "6",
              "triangle-down-open",
              106,
              "106",
              "triangle-down-dot",
              206,
              "206",
              "triangle-down-open-dot",
              306,
              "306",
              "triangle-left",
              7,
              "7",
              "triangle-left-open",
              107,
              "107",
              "triangle-left-dot",
              207,
              "207",
              "triangle-left-open-dot",
              307,
              "307",
              "triangle-right",
              8,
              "8",
              "triangle-right-open",
              108,
              "108",
              "triangle-right-dot",
              208,
              "208",
              "triangle-right-open-dot",
              308,
              "308",
              "triangle-ne",
              9,
              "9",
              "triangle-ne-open",
              109,
              "109",
              "triangle-ne-dot",
              209,
              "209",
              "triangle-ne-open-dot",
              309,
              "309",
              "triangle-se",
              10,
              "10",
              "triangle-se-open",
              110,
              "110",
              "triangle-se-dot",
              210,
              "210",
              "triangle-se-open-dot",
              310,
              "310",
              "triangle-sw",
              11,
              "11",
              "triangle-sw-open",
              111,
              "111",
              "triangle-sw-dot",
              211,
              "211",
              "triangle-sw-open-dot",
              311,
              "311",
              "triangle-nw",
              12,
              "12",
              "triangle-nw-open",
              112,
              "112",
              "triangle-nw-dot",
              212,
              "212",
              "triangle-nw-open-dot",
              312,
              "312",
              "pentagon",
              13,
              "13",
              "pentagon-open",
              113,
              "113",
              "pentagon-dot",
              213,
              "213",
              "pentagon-open-dot",
              313,
              "313",
              "hexagon",
              14,
              "14",
              "hexagon-open",
              114,
              "114",
              "hexagon-dot",
              214,
              "214",
              "hexagon-open-dot",
              314,
              "314",
              "hexagon2",
              15,
              "15",
              "hexagon2-open",
              115,
              "115",
              "hexagon2-dot",
              215,
              "215",
              "hexagon2-open-dot",
              315,
              "315",
              "octagon",
              16,
              "16",
              "octagon-open",
              116,
              "116",
              "octagon-dot",
              216,
              "216",
              "octagon-open-dot",
              316,
              "316",
              "star",
              17,
              "17",
              "star-open",
              117,
              "117",
              "star-dot",
              217,
              "217",
              "star-open-dot",
              317,
              "317",
              "hexagram",
              18,
              "18",
              "hexagram-open",
              118,
              "118",
              "hexagram-dot",
              218,
              "218",
              "hexagram-open-dot",
              318,
              "318",
              "star-triangle-up",
              19,
              "19",
              "star-triangle-up-open",
              119,
              "119",
              "star-triangle-up-dot",
              219,
              "219",
              "star-triangle-up-open-dot",
              319,
              "319",
              "star-triangle-down",
              20,
              "20",
              "star-triangle-down-open",
              120,
              "120",
              "star-triangle-down-dot",
              220,
              "220",
              "star-triangle-down-open-dot",
              320,
              "320",
              "star-square",
              21,
              "21",
              "star-square-open",
              121,
              "121",
              "star-square-dot",
              221,
              "221",
              "star-square-open-dot",
              321,
              "321",
              "star-diamond",
              22,
              "22",
              "star-diamond-open",
              122,
              "122",
              "star-diamond-dot",
              222,
              "222",
              "star-diamond-open-dot",
              322,
              "322",
              "diamond-tall",
              23,
              "23",
              "diamond-tall-open",
              123,
              "123",
              "diamond-tall-dot",
              223,
              "223",
              "diamond-tall-open-dot",
              323,
              "323",
              "diamond-wide",
              24,
              "24",
              "diamond-wide-open",
              124,
              "124",
              "diamond-wide-dot",
              224,
              "224",
              "diamond-wide-open-dot",
              324,
              "324",
              "hourglass",
              25,
              "25",
              "hourglass-open",
              125,
              "125",
              "hourglass-dot",
              225,
              "225",
              "hourglass-open-dot",
              325,
              "325",
              "bowtie",
              26,
              "26",
              "bowtie-open",
              126,
              "126",
              "bowtie-dot",
              226,
              "226",
              "bowtie-open-dot",
              326,
              "326",
              "circle-cross",
              27,
              "27",
              "circle-cross-open",
              127,
              "127",
              "circle-cross-dot",
              227,
              "227",
              "circle-cross-open-dot",
              327,
              "327",
              "circle-x",
              28,
              "28",
              "circle-x-open",
              128,
              "128",
              "circle-x-dot",
              228,
              "228",
              "circle-x-open-dot",
              328,
              "328",
              "square-cross",
              29,
              "29",
              "square-cross-open",
              129,
              "129",
              "square-cross-dot",
              229,
              "229",
              "square-cross-open-dot",
              329,
              "329",
              "square-x",
              30,
              "30",
              "square-x-open",
              130,
              "130",
              "square-x-dot",
              230,
              "230",
              "square-x-open-dot",
              330,
              "330",
              "diamond-cross",
              31,
              "31",
              "diamond-cross-open",
              131,
              "131",
              "diamond-cross-dot",
              231,
              "231",
              "diamond-cross-open-dot",
              331,
              "331",
              "diamond-x",
              32,
              "32",
              "diamond-x-open",
              132,
              "132",
              "diamond-x-dot",
              232,
              "232",
              "diamond-x-open-dot",
              332,
              "332",
              "cross-thin",
              33,
              "33",
              "cross-thin-open",
              133,
              "133",
              "cross-thin-dot",
              233,
              "233",
              "cross-thin-open-dot",
              333,
              "333",
              "x-thin",
              34,
              "34",
              "x-thin-open",
              134,
              "134",
              "x-thin-dot",
              234,
              "234",
              "x-thin-open-dot",
              334,
              "334",
              "asterisk",
              35,
              "35",
              "asterisk-open",
              135,
              "135",
              "asterisk-dot",
              235,
              "235",
              "asterisk-open-dot",
              335,
              "335",
              "hash",
              36,
              "36",
              "hash-open",
              136,
              "136",
              "hash-dot",
              236,
              "236",
              "hash-open-dot",
              336,
              "336",
              "y-up",
              37,
              "37",
              "y-up-open",
              137,
              "137",
              "y-up-dot",
              237,
              "237",
              "y-up-open-dot",
              337,
              "337",
              "y-down",
              38,
              "38",
              "y-down-open",
              138,
              "138",
              "y-down-dot",
              238,
              "238",
              "y-down-open-dot",
              338,
              "338",
              "y-left",
              39,
              "39",
              "y-left-open",
              139,
              "139",
              "y-left-dot",
              239,
              "239",
              "y-left-open-dot",
              339,
              "339",
              "y-right",
              40,
              "40",
              "y-right-open",
              140,
              "140",
              "y-right-dot",
              240,
              "240",
              "y-right-open-dot",
              340,
              "340",
              "line-ew",
              41,
              "41",
              "line-ew-open",
              141,
              "141",
              "line-ew-dot",
              241,
              "241",
              "line-ew-open-dot",
              341,
              "341",
              "line-ns",
              42,
              "42",
              "line-ns-open",
              142,
              "142",
              "line-ns-dot",
              242,
              "242",
              "line-ns-open-dot",
              342,
              "342",
              "line-ne",
              43,
              "43",
              "line-ne-open",
              143,
              "143",
              "line-ne-dot",
              243,
              "243",
              "line-ne-open-dot",
              343,
              "343",
              "line-nw",
              44,
              "44",
              "line-nw-open",
              144,
              "144",
              "line-nw-dot",
              244,
              "244",
              "line-nw-open-dot",
              344,
              "344",
              "arrow-up",
              45,
              "45",
              "arrow-up-open",
              145,
              "145",
              "arrow-up-dot",
              245,
              "245",
              "arrow-up-open-dot",
              345,
              "345",
              "arrow-down",
              46,
              "46",
              "arrow-down-open",
              146,
              "146",
              "arrow-down-dot",
              246,
              "246",
              "arrow-down-open-dot",
              346,
              "346",
              "arrow-left",
              47,
              "47",
              "arrow-left-open",
              147,
              "147",
              "arrow-left-dot",
              247,
              "247",
              "arrow-left-open-dot",
              347,
              "347",
              "arrow-right",
              48,
              "48",
              "arrow-right-open",
              148,
              "148",
              "arrow-right-dot",
              248,
              "248",
              "arrow-right-open-dot",
              348,
              "348",
              "arrow-bar-up",
              49,
              "49",
              "arrow-bar-up-open",
              149,
              "149",
              "arrow-bar-up-dot",
              249,
              "249",
              "arrow-bar-up-open-dot",
              349,
              "349",
              "arrow-bar-down",
              50,
              "50",
              "arrow-bar-down-open",
              150,
              "150",
              "arrow-bar-down-dot",
              250,
              "250",
              "arrow-bar-down-open-dot",
              350,
              "350",
              "arrow-bar-left",
              51,
              "51",
              "arrow-bar-left-open",
              151,
              "151",
              "arrow-bar-left-dot",
              251,
              "251",
              "arrow-bar-left-open-dot",
              351,
              "351",
              "arrow-bar-right",
              52,
              "52",
              "arrow-bar-right-open",
              152,
              "152",
              "arrow-bar-right-dot",
              252,
              "252",
              "arrow-bar-right-open-dot",
              352,
              "352",
              "arrow",
              53,
              "53",
              "arrow-open",
              153,
              "153",
              "arrow-dot",
              253,
              "253",
              "arrow-open-dot",
              353,
              "353",
              "arrow-wide",
              54,
              "54",
              "arrow-wide-open",
              154,
              "154",
              "arrow-wide-dot",
              254,
              "254",
              "arrow-wide-open-dot",
              354,
              "354"
            ],
            "dflt": "circle",
            "arrayOk": true,
            "editType": "style",
            "description": "Marker symbol: a name (`'diamond-open'`), a Plotly numeric code, a custom symbol registered with `symbols.register` (with the same `-open` / `-dot` variants), a `'text:…'` glyph such as `'text:🚀'`, or one per point.",
            "valType": "enumerated"
          },
          "group": {
            "editType": "calc",
            "description": "A group per node (a name or a number; empty for none): colors the nodes by group, gives the legend one item per group, which a click hides, and keeps the nodes of a group together in the arrangements that can.",
            "valType": "data_array"
          },
          "value": {
            "editType": "calc",
            "role": "data",
            "description": "A number per node, for the arrangements that place or order nodes by one: the height of a node in a `'dendrogram'` (the distance at which a clustering merged it; leaves without one are at 0), the order of siblings with `tree.sort: 'value'`, the place along its axis with `hive.position: 'value'`. `%{value}` in node hover labels.",
            "valType": "data_array"
          },
          "customdata": {
            "editType": "calc",
            "description": "Extra data per node for `%{customdata}` and events.",
            "valType": "data_array"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "arrayOk": true,
            "editType": "style",
            "description": "Node opacity (multiplied by the trace `opacity`), or one per node.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "Outlines of the nodes.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color of the nodes, or one per node. Default: the plot background, so that nodes stand out from the links and from each other.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 1,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width of the nodes in CSS px, or one per node.",
              "valType": "number"
            }
          },
          "shape": {
            "values": ["marker", "box"],
            "dflt": "marker",
            "editType": "calc",
            "description": "How nodes are drawn: a marker (`node.symbol`, `node.size`) with the label next to it, or a box as large as the label with the text inside (`'box'`; diagrams such as pipelines and state machines). Default: `'box'` with `arrangement: 'layered'` when the nodes have labels, else `'marker'`.",
            "valType": "enumerated"
          },
          "textposition": {
            "values": [
              "auto",
              "top left",
              "top center",
              "top right",
              "middle left",
              "middle center",
              "middle right",
              "bottom left",
              "bottom center",
              "bottom right",
              "none"
            ],
            "dflt": "auto",
            "editType": "calc",
            "description": "Where the label sits relative to its marker. `'auto'`: where the arrangement leaves room. To the right of the node in general; pointing away from the center around a `'circular'` arrangement; in a tree, beyond a leaf and before a node with children (turned upright under the leaves of a tree that grows downwards or upwards, and along the radius in a `'radial'` tree, never upside down); under the line of an `'arc'` diagram, upright; beside the axes of a `'hive'` plot. `'none'` draws no labels (they still show in hover labels). Box nodes have their label inside.",
            "valType": "enumerated"
          },
          "textfont": {
            "editType": "calc",
            "description": "Font of the node labels. Default: `layout.font`, with the automatic halo (`shadow: auto`). Family, size, weight and style set the size of box nodes.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "calc",
              "description": "CSS font-family list. Default: `layout.font.family`.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "calc",
              "description": "Font size in CSS px. Default: `layout.font.size`.",
              "valType": "number"
            },
            "color": {
              "editType": "plot",
              "description": "Text color. Default: `layout.font.color`; inside a box node, black or white, whichever reads better on the box.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "calc",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "calc",
              "description": "Font style.",
              "valType": "enumerated"
            },
            "shadow": {
              "editType": "plot",
              "description": "CSS `text-shadow` (first shadow only), `'none'`, or `'auto'` (the default): a thin halo in the text's contrast color, so labels read over the links.",
              "valType": "string"
            }
          },
          "draggable": {
            "editType": "plot",
            "description": "Whether a press on a node drags it. `'preset'`: the release restyles `node.x` and `node.y` with the node's new position as data (a date on a date axis, the nearest category on a category axis). `'force'`: the release pins the node, restyling its `node.x` and `node.y` and, with the picture on screen, `force.start`, so nothing else moves; with `force.simulate` the other nodes give way while it is dragged. A pinned node has a ring, and a double click releases it. A press that does not move is a click; a press on empty space is the chart's own drag (`dragmode`). Default: `true` for `'preset'` and `'force'` (not on a timeline), `false` for `'custom'`, whose layout gets the position as `graph.x` / `graph.y`. The nodes of the other arrangements do not drag.",
            "valType": "boolean"
          },
          "hoverinfo": {
            "values": ["all", "none", "skip"],
            "dflt": "all",
            "editType": "none",
            "description": "Hover of the nodes: labels (`'all'`), events without labels (`'none'`) or no hover and no events (`'skip'`). Default: the trace `hoverinfo`.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the node hover labels: `%{label}`, `%{degree}`, `%{indegree}`, `%{outdegree}`, `%{neighbors}` (the number of nodes it is linked to), `%{group}`, `%{value}`, `%{size}`, `%{color}`, `%{x}`, `%{y}`, `%{customdata}`. `<extra>…</extra>` replaces the trace name.",
            "valType": "string"
          }
        },
        "link": {
          "editType": "calc",
          "description": "The links.",
          "role": "object",
          "source": {
            "editType": "calc",
            "role": "data",
            "description": "Source node index of every link. A link whose source or target is not a node is dropped.",
            "valType": "data_array"
          },
          "target": {
            "editType": "calc",
            "role": "data",
            "description": "Target node index of every link. A link from a node to itself is drawn as a loop.",
            "valType": "data_array"
          },
          "value": {
            "editType": "calc",
            "role": "data",
            "description": "A positive number per link: its weight for the layouts (a stronger pull, a shorter link) and `%{value}` in hover labels. It sets the width only with `link.widthby: 'value'`. Missing or non-positive values count as 1.",
            "valType": "data_array"
          },
          "label": {
            "editType": "calc",
            "description": "Link labels, shown in hover labels.",
            "valType": "data_array"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Link color, or one per link. Default: a translucent gray that reads on the plot background, light or dark.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Link width in CSS px, or one per link. Ignored with `link.widthby`.",
            "valType": "number"
          },
          "widthby": {
            "values": ["none", "value"],
            "dflt": "none",
            "editType": "plot",
            "description": "`'value'`: widths from `link.value`, proportional to it, between the two widths of `link.widthrange` (the largest value gets the second).",
            "valType": "enumerated"
          },
          "widthrange": {
            "items": [
              {
                "min": 0,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [1, 8],
            "editType": "plot",
            "description": "With `link.widthby: 'value'`: the widths in CSS px of a link of value 0 and of the link with the largest value.",
            "valType": "info_array"
          },
          "dash": {
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style of every link: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
            "valType": "string"
          },
          "secondary": {
            "editType": "style",
            "description": "Style of the links an arrangement sets apart from the others: with `'layered'`, the links that close a cycle, which the layout had to turn around to give every other link one direction (back edges; their arrowheads still point the way the data says); with `'tree'`, `'radial'` and `'dendrogram'`, the links that are not part of the tree (they skip levels or join two branches, and are drawn straight). Default: dashed and a little fainter.",
            "role": "object",
            "dash": {
              "dflt": "dash",
              "editType": "style",
              "description": "Dash style of the secondary links (see `link.dash`).",
              "valType": "string"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "dflt": 0.7,
              "editType": "style",
              "description": "Opacity of the secondary links, multiplied by `link.opacity`.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Color of the secondary links. Default: each link's own color.",
              "valType": "color"
            }
          },
          "curve": {
            "min": -2,
            "max": 2,
            "arrayOk": true,
            "editType": "plot",
            "description": "How far a link bows out, as a fraction of its length: 0 is straight, positive bows to the left of its direction, negative to the right. One value, or one per link. Default: straight, except that the links between the same two nodes are fanned out so that each can be seen. A value replaces that fan: one value for all links draws the links between the same two nodes on top of each other (give one value per link to keep them apart), and in an array a link without a number keeps its place in the fan. A link the layout routed keeps its route.",
            "valType": "number"
          },
          "arrow": {
            "editType": "plot",
            "description": "Arrowheads. Their tips stop at the node's edge, whatever its size.",
            "role": "object",
            "end": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw an arrowhead at the target end of every link (a directed graph). Default: `true` with `arrangement: 'layered'`, whose links all point one way, else `false`.",
              "valType": "boolean"
            },
            "start": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw an arrowhead at the source end of every link.",
              "valType": "boolean"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "editType": "plot",
              "description": "Length of the arrowheads in CSS px; a wide link gets a head at least three times its width.",
              "valType": "number"
            }
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "editType": "style",
            "description": "Link opacity (multiplied by the trace `opacity` and the color alpha).",
            "valType": "number"
          },
          "bundle": {
            "editType": "calc",
            "description": "Link bundling. Default: none.",
            "role": "object",
            "method": {
              "values": ["none", "auto", "hierarchical", "force"],
              "dflt": "none",
              "editType": "calc",
              "description": "Draw links that run the same way together, as bundles, so that a dense graph shows its main streams. The nodes stay where they are. `'hierarchical'`: a link follows the path between its two ends in the hierarchy of the nodes, their groups (`node.group`) or, under a tree arrangement, the tree: links between the same two groups share their middle. Cheap, and at its best on `'circular'` and `'radial'`. `'force'`: links that lie alongside each other attract each other, for graphs without groups; costly, and refused above 20,000 links (the links are then drawn straight, with a warning). `'auto'`: `'hierarchical'` when the nodes have groups or the arrangement is a tree, else `'force'`. Links the arrangement routed itself (`'layered'`, `'arc'`, `'hive'`, the edges of a tree) keep their routes. The bundles are computed after the layout and arrive a moment after the nodes (see `worker`); while a node is dragged, hierarchical bundles follow it and force-directed ones are drawn straight until it is dropped.",
              "valType": "enumerated"
            },
            "strength": {
              "min": 0,
              "max": 1,
              "dflt": 0.85,
              "editType": "calc",
              "description": "How tightly the links are bundled: 0 leaves them straight, 1 pulls them all the way together.",
              "valType": "number"
            },
            "compatibility": {
              "min": 0,
              "max": 1,
              "dflt": 0.6,
              "editType": "calc",
              "description": "With force-directed bundling: how alike two links must be to attract each other (their directions, lengths and positions), 0 to 1. Lower values bundle more links, also ones that do not belong together.",
              "valType": "number"
            }
          },
          "customdata": {
            "editType": "calc",
            "description": "Extra data per link for `%{customdata}` and events.",
            "valType": "data_array"
          },
          "hoverinfo": {
            "values": ["all", "none", "skip"],
            "dflt": "all",
            "editType": "none",
            "description": "Hover of the links: labels (`'all'`), events without labels (`'none'`) or no hover and no events (`'skip'`). Default: the trace `hoverinfo`.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the link hover labels: `%{label}`, `%{value}`, `%{source.label}`, `%{target.label}`, `%{source.index}`, `%{target.index}`, `%{customdata}`. `<extra>…</extra>` replaces the trace name.",
            "valType": "string"
          }
        },
        "highlight": {
          "editType": "style",
          "description": "Highlighting: the neighbourhood of the node or link under the pointer (or of `highlight.nodes`), and a shortest path between two selected nodes or the two of `highlight.path`. What is highlighted keeps its look, its label shows even where there was no room for it, and everything else is dimmed; nothing is laid out or built again. A hover comes first, then `highlight.nodes`, then a path.",
          "role": "object",
          "mode": {
            "flags": ["neighbors", "path"],
            "extras": ["none"],
            "dflt": "neighbors+path",
            "editType": "style",
            "description": "What is emphasized, the rest of the graph being dimmed (`highlight.dim`). `'neighbors'`: while the pointer is over a node, the node, the links that lead from it and the nodes they lead to (`highlight.hops`, `highlight.direction`); over a link, the link and its two ends. `'path'`: while exactly two nodes are selected, a shortest path between them. `'none'`: neither. Hover highlighting is skipped for a graph of more than 50,000 nodes and links together.",
            "valType": "flaglist"
          },
          "hops": {
            "min": 0,
            "dflt": 1,
            "editType": "style",
            "description": "With `'neighbors'`: how many links away from the hovered node the highlight reaches. 1: its neighbours; 2: their neighbours too; 0: the node alone. The links between two nodes that are both at the last hop are not part of it.",
            "valType": "integer"
          },
          "direction": {
            "values": ["both", "out", "in"],
            "dflt": "both",
            "editType": "style",
            "description": "With `'neighbors'`: which links are followed from the hovered node, and from each node reached. `'both'`: all of them. `'out'`: only from a link's source to its target, which gives what the node leads to (its descendants). `'in'`: only from target to source: what leads to it (its ancestors).",
            "valType": "enumerated"
          },
          "dim": {
            "min": 0,
            "max": 1,
            "dflt": 0.15,
            "editType": "style",
            "description": "Opacity factor of the nodes, links and labels that are not highlighted while something is.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the highlighted links. Default: each link's own color, made opaque.",
            "valType": "color"
          },
          "nodes": {
            "editType": "style",
            "description": "Node indices whose neighbourhood is highlighted as a hover on each of them would (`highlight.hops`, `highlight.direction`), whatever `highlight.mode` says, until this is unset: for a highlight that the app drives (a search box, a linked view, a story). The pointer over a node or link takes its place while it is there.",
            "valType": "data_array"
          },
          "path": {
            "items": [
              {
                "min": 0,
                "editType": "style",
                "valType": "integer"
              },
              {
                "min": 0,
                "editType": "style",
                "valType": "integer"
              }
            ],
            "editType": "style",
            "description": "Two node indices: a shortest path from the first to the second is highlighted, whatever is selected, until this is unset. Nothing is highlighted when there is no such path. `graphPath(trace)` returns the path that is highlighted.",
            "valType": "info_array"
          },
          "pathweight": {
            "values": ["hops", "value"],
            "dflt": "hops",
            "editType": "style",
            "description": "What makes a path short. `'hops'`: the number of its links. `'value'`: the sum of its links' `link.value`, each taken as a cost or a distance (a link without a positive value costs 1).",
            "valType": "enumerated"
          },
          "pathdirected": {
            "editType": "style",
            "description": "Whether a path follows every link from its source to its target only. Default: `true` when the links have arrowheads at their targets (`link.arrow.end`), else `false`: a path may run along a link either way.",
            "valType": "boolean"
          }
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected nodes while a selection is active (box or lasso select, `selectedpoints`). Links between two selected nodes keep their style; the others are dimmed.",
          "role": "object",
          "node": {
            "editType": "style",
            "description": "Style of selected nodes.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of selected nodes.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Color of selected nodes.",
              "valType": "color"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected nodes while a selection is active (box or lasso select, `selectedpoints`). Links between two selected nodes keep their style; the others are dimmed.",
          "role": "object",
          "node": {
            "editType": "style",
            "description": "Style of unselected nodes.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of unselected nodes. Default: 0.2 × the node opacity when no selected or unselected opacity is set.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Color of unselected nodes.",
              "valType": "color"
            }
          }
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, scatter traces draw above bars (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        }
      }
    },
    "graph3d": {
      "categories": ["gl3d", "symbols", "showLegend", "pie-like"],
      "meta": {
        "description": "Network graph in a 3D scene: nodes as lit spheres or sprites and links as lines or tubes, at given positions or placed in space by a force layout or in planes by rank; hovered through GPU picking; every part is one draw call.",
        "docsPage": "graph3d"
      },
      "attributes": {
        "description": "Network graph in a 3D scene: nodes as lit spheres or sprites and the links between them as lines or tubes, at given positions or placed by a layout in space.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": [],
          "extras": ["all", "none", "skip"],
          "dflt": "all",
          "editType": "none",
          "description": "Hover of nodes and links: labels (`'all'`), events without labels (`'none'`) or no hover at all (`'skip'`). The default of `node.hoverinfo` and `link.hoverinfo`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "scene": {
          "dflt": "scene",
          "editType": "calc",
          "description": "The 3D scene this trace is drawn in: `'scene'` (`layout.scene`), `'scene2'` (`layout.scene2`), ….",
          "valType": "subplotid"
        },
        "arrangement": {
          "values": ["preset", "force", "layered", "custom"],
          "editType": "calc",
          "description": "The layout that places the nodes in space. `'preset'`: at `node.x` / `node.y` / `node.z`, which are data on the scene's axes. `'force'`: a force-directed layout in three dimensions (`force`). `'layered'`: a directed graph in planes, one per rank, the nodes of a plane spread by the force layout (`layered`). `'custom'`: the layout named by `custom.name`, which returns `z` as well. The computed arrangements hide the scene's axes and keep the layout's proportions. Default: `'preset'` when every node has an `x`, a `y` and a `z`, else `'force'`.",
          "valType": "enumerated"
        },
        "custom": {
          "editType": "calc",
          "description": "The layout of `arrangement: 'custom'`.",
          "role": "object",
          "name": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "With `arrangement: 'custom'`: the name of a layout registered with `registerGraphLayout(name, layout)`.",
            "valType": "string"
          },
          "options": {
            "editType": "calc",
            "description": "Passed to the custom layout as its second argument, as it is.",
            "valType": "any"
          }
        },
        "labels": {
          "editType": "calc",
          "role": "data",
          "description": "Tree input, as the hierarchical traces take it: the label of every node. With `parents` (and no `link.source`), every node with a parent gets a link from its parent. The default of `node.label`.",
          "valType": "data_array"
        },
        "parents": {
          "editType": "calc",
          "role": "data",
          "description": "Tree input: the parent of every node, as its id (`ids`, else `labels`); `''` for a root. A parent that is no node becomes a node of its own, after the others.",
          "valType": "data_array"
        },
        "node": {
          "editType": "calc",
          "description": "The nodes.",
          "role": "object",
          "label": {
            "editType": "calc",
            "role": "data",
            "description": "Node labels, one per node index: drawn next to the node (see `node.textposition`) and shown in hover labels. Where labels would overlap on screen, the nodes with the most links keep theirs; turning the scene or moving closer shows others.",
            "valType": "data_array"
          },
          "x": {
            "editType": "calc",
            "description": "Node x positions. With `arrangement: 'preset'` they are data on the scene's x axis and a node without all three coordinates is not drawn. With a computed arrangement they are layout units: a node with `x`, `y` and `z` stays where it is, and one with some of them is held along those axes.",
            "valType": "data_array"
          },
          "y": {
            "editType": "calc",
            "description": "Node y positions (see `node.x`).",
            "valType": "data_array"
          },
          "z": {
            "editType": "calc",
            "description": "Node z positions (see `node.x`).",
            "valType": "data_array"
          },
          "size": {
            "min": 0,
            "dflt": 10,
            "arrayOk": true,
            "editType": "calc",
            "description": "Node diameter in CSS px, or one per node. A sphere has that size at the middle of the scene in its first view (see `node.render`); a sprite has it everywhere. Ignored with `node.sizeby`.",
            "valType": "number"
          },
          "sizeby": {
            "values": ["none", "degree", "indegree", "outdegree"],
            "dflt": "none",
            "editType": "calc",
            "description": "Size nodes by their links instead of `node.size`: `'degree'` (all links at the node), `'indegree'` (links that end at it) or `'outdegree'` (links that start at it). The area grows with the count, between the two diameters of `node.sizerange`.",
            "valType": "enumerated"
          },
          "sizerange": {
            "items": [
              {
                "min": 0,
                "editType": "calc",
                "valType": "number"
              },
              {
                "min": 0,
                "editType": "calc",
                "valType": "number"
              }
            ],
            "dflt": [6, 30],
            "editType": "calc",
            "description": "With `node.sizeby`: the diameters in CSS px of a node without links and of the node with the most.",
            "valType": "info_array"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Node color, one CSS color per node, or numbers mapped through `colorscale` (with a colorbar when `showscale` is on). Default: the group's color when `node.group` is given (the colorway, one color per group), else the trace's colorway color.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `node.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `node.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "render": {
            "values": ["sphere", "sprite"],
            "dflt": "sphere",
            "editType": "calc",
            "description": "`'sphere'`: lit spheres that are part of the scene: `node.size` is their diameter in CSS px at the middle of the scene in its first view, so nodes are larger near the camera and grow when it comes closer. `'sprite'`: flat markers (`node.symbol`, `node.line`) that face the camera and keep `node.size` CSS px at every depth, as `scatter3d` markers do.",
            "valType": "enumerated"
          },
          "symbol": {
            "values": [
              "circle",
              0,
              "0",
              "circle-open",
              100,
              "100",
              "circle-dot",
              200,
              "200",
              "circle-open-dot",
              300,
              "300",
              "square",
              1,
              "1",
              "square-open",
              101,
              "101",
              "square-dot",
              201,
              "201",
              "square-open-dot",
              301,
              "301",
              "diamond",
              2,
              "2",
              "diamond-open",
              102,
              "102",
              "diamond-dot",
              202,
              "202",
              "diamond-open-dot",
              302,
              "302",
              "cross",
              3,
              "3",
              "cross-open",
              103,
              "103",
              "cross-dot",
              203,
              "203",
              "cross-open-dot",
              303,
              "303",
              "x",
              4,
              "4",
              "x-open",
              104,
              "104",
              "x-dot",
              204,
              "204",
              "x-open-dot",
              304,
              "304",
              "triangle-up",
              5,
              "5",
              "triangle-up-open",
              105,
              "105",
              "triangle-up-dot",
              205,
              "205",
              "triangle-up-open-dot",
              305,
              "305",
              "triangle-down",
              6,
              "6",
              "triangle-down-open",
              106,
              "106",
              "triangle-down-dot",
              206,
              "206",
              "triangle-down-open-dot",
              306,
              "306",
              "triangle-left",
              7,
              "7",
              "triangle-left-open",
              107,
              "107",
              "triangle-left-dot",
              207,
              "207",
              "triangle-left-open-dot",
              307,
              "307",
              "triangle-right",
              8,
              "8",
              "triangle-right-open",
              108,
              "108",
              "triangle-right-dot",
              208,
              "208",
              "triangle-right-open-dot",
              308,
              "308",
              "triangle-ne",
              9,
              "9",
              "triangle-ne-open",
              109,
              "109",
              "triangle-ne-dot",
              209,
              "209",
              "triangle-ne-open-dot",
              309,
              "309",
              "triangle-se",
              10,
              "10",
              "triangle-se-open",
              110,
              "110",
              "triangle-se-dot",
              210,
              "210",
              "triangle-se-open-dot",
              310,
              "310",
              "triangle-sw",
              11,
              "11",
              "triangle-sw-open",
              111,
              "111",
              "triangle-sw-dot",
              211,
              "211",
              "triangle-sw-open-dot",
              311,
              "311",
              "triangle-nw",
              12,
              "12",
              "triangle-nw-open",
              112,
              "112",
              "triangle-nw-dot",
              212,
              "212",
              "triangle-nw-open-dot",
              312,
              "312",
              "pentagon",
              13,
              "13",
              "pentagon-open",
              113,
              "113",
              "pentagon-dot",
              213,
              "213",
              "pentagon-open-dot",
              313,
              "313",
              "hexagon",
              14,
              "14",
              "hexagon-open",
              114,
              "114",
              "hexagon-dot",
              214,
              "214",
              "hexagon-open-dot",
              314,
              "314",
              "hexagon2",
              15,
              "15",
              "hexagon2-open",
              115,
              "115",
              "hexagon2-dot",
              215,
              "215",
              "hexagon2-open-dot",
              315,
              "315",
              "octagon",
              16,
              "16",
              "octagon-open",
              116,
              "116",
              "octagon-dot",
              216,
              "216",
              "octagon-open-dot",
              316,
              "316",
              "star",
              17,
              "17",
              "star-open",
              117,
              "117",
              "star-dot",
              217,
              "217",
              "star-open-dot",
              317,
              "317",
              "hexagram",
              18,
              "18",
              "hexagram-open",
              118,
              "118",
              "hexagram-dot",
              218,
              "218",
              "hexagram-open-dot",
              318,
              "318",
              "star-triangle-up",
              19,
              "19",
              "star-triangle-up-open",
              119,
              "119",
              "star-triangle-up-dot",
              219,
              "219",
              "star-triangle-up-open-dot",
              319,
              "319",
              "star-triangle-down",
              20,
              "20",
              "star-triangle-down-open",
              120,
              "120",
              "star-triangle-down-dot",
              220,
              "220",
              "star-triangle-down-open-dot",
              320,
              "320",
              "star-square",
              21,
              "21",
              "star-square-open",
              121,
              "121",
              "star-square-dot",
              221,
              "221",
              "star-square-open-dot",
              321,
              "321",
              "star-diamond",
              22,
              "22",
              "star-diamond-open",
              122,
              "122",
              "star-diamond-dot",
              222,
              "222",
              "star-diamond-open-dot",
              322,
              "322",
              "diamond-tall",
              23,
              "23",
              "diamond-tall-open",
              123,
              "123",
              "diamond-tall-dot",
              223,
              "223",
              "diamond-tall-open-dot",
              323,
              "323",
              "diamond-wide",
              24,
              "24",
              "diamond-wide-open",
              124,
              "124",
              "diamond-wide-dot",
              224,
              "224",
              "diamond-wide-open-dot",
              324,
              "324",
              "hourglass",
              25,
              "25",
              "hourglass-open",
              125,
              "125",
              "hourglass-dot",
              225,
              "225",
              "hourglass-open-dot",
              325,
              "325",
              "bowtie",
              26,
              "26",
              "bowtie-open",
              126,
              "126",
              "bowtie-dot",
              226,
              "226",
              "bowtie-open-dot",
              326,
              "326",
              "circle-cross",
              27,
              "27",
              "circle-cross-open",
              127,
              "127",
              "circle-cross-dot",
              227,
              "227",
              "circle-cross-open-dot",
              327,
              "327",
              "circle-x",
              28,
              "28",
              "circle-x-open",
              128,
              "128",
              "circle-x-dot",
              228,
              "228",
              "circle-x-open-dot",
              328,
              "328",
              "square-cross",
              29,
              "29",
              "square-cross-open",
              129,
              "129",
              "square-cross-dot",
              229,
              "229",
              "square-cross-open-dot",
              329,
              "329",
              "square-x",
              30,
              "30",
              "square-x-open",
              130,
              "130",
              "square-x-dot",
              230,
              "230",
              "square-x-open-dot",
              330,
              "330",
              "diamond-cross",
              31,
              "31",
              "diamond-cross-open",
              131,
              "131",
              "diamond-cross-dot",
              231,
              "231",
              "diamond-cross-open-dot",
              331,
              "331",
              "diamond-x",
              32,
              "32",
              "diamond-x-open",
              132,
              "132",
              "diamond-x-dot",
              232,
              "232",
              "diamond-x-open-dot",
              332,
              "332",
              "cross-thin",
              33,
              "33",
              "cross-thin-open",
              133,
              "133",
              "cross-thin-dot",
              233,
              "233",
              "cross-thin-open-dot",
              333,
              "333",
              "x-thin",
              34,
              "34",
              "x-thin-open",
              134,
              "134",
              "x-thin-dot",
              234,
              "234",
              "x-thin-open-dot",
              334,
              "334",
              "asterisk",
              35,
              "35",
              "asterisk-open",
              135,
              "135",
              "asterisk-dot",
              235,
              "235",
              "asterisk-open-dot",
              335,
              "335",
              "hash",
              36,
              "36",
              "hash-open",
              136,
              "136",
              "hash-dot",
              236,
              "236",
              "hash-open-dot",
              336,
              "336",
              "y-up",
              37,
              "37",
              "y-up-open",
              137,
              "137",
              "y-up-dot",
              237,
              "237",
              "y-up-open-dot",
              337,
              "337",
              "y-down",
              38,
              "38",
              "y-down-open",
              138,
              "138",
              "y-down-dot",
              238,
              "238",
              "y-down-open-dot",
              338,
              "338",
              "y-left",
              39,
              "39",
              "y-left-open",
              139,
              "139",
              "y-left-dot",
              239,
              "239",
              "y-left-open-dot",
              339,
              "339",
              "y-right",
              40,
              "40",
              "y-right-open",
              140,
              "140",
              "y-right-dot",
              240,
              "240",
              "y-right-open-dot",
              340,
              "340",
              "line-ew",
              41,
              "41",
              "line-ew-open",
              141,
              "141",
              "line-ew-dot",
              241,
              "241",
              "line-ew-open-dot",
              341,
              "341",
              "line-ns",
              42,
              "42",
              "line-ns-open",
              142,
              "142",
              "line-ns-dot",
              242,
              "242",
              "line-ns-open-dot",
              342,
              "342",
              "line-ne",
              43,
              "43",
              "line-ne-open",
              143,
              "143",
              "line-ne-dot",
              243,
              "243",
              "line-ne-open-dot",
              343,
              "343",
              "line-nw",
              44,
              "44",
              "line-nw-open",
              144,
              "144",
              "line-nw-dot",
              244,
              "244",
              "line-nw-open-dot",
              344,
              "344",
              "arrow-up",
              45,
              "45",
              "arrow-up-open",
              145,
              "145",
              "arrow-up-dot",
              245,
              "245",
              "arrow-up-open-dot",
              345,
              "345",
              "arrow-down",
              46,
              "46",
              "arrow-down-open",
              146,
              "146",
              "arrow-down-dot",
              246,
              "246",
              "arrow-down-open-dot",
              346,
              "346",
              "arrow-left",
              47,
              "47",
              "arrow-left-open",
              147,
              "147",
              "arrow-left-dot",
              247,
              "247",
              "arrow-left-open-dot",
              347,
              "347",
              "arrow-right",
              48,
              "48",
              "arrow-right-open",
              148,
              "148",
              "arrow-right-dot",
              248,
              "248",
              "arrow-right-open-dot",
              348,
              "348",
              "arrow-bar-up",
              49,
              "49",
              "arrow-bar-up-open",
              149,
              "149",
              "arrow-bar-up-dot",
              249,
              "249",
              "arrow-bar-up-open-dot",
              349,
              "349",
              "arrow-bar-down",
              50,
              "50",
              "arrow-bar-down-open",
              150,
              "150",
              "arrow-bar-down-dot",
              250,
              "250",
              "arrow-bar-down-open-dot",
              350,
              "350",
              "arrow-bar-left",
              51,
              "51",
              "arrow-bar-left-open",
              151,
              "151",
              "arrow-bar-left-dot",
              251,
              "251",
              "arrow-bar-left-open-dot",
              351,
              "351",
              "arrow-bar-right",
              52,
              "52",
              "arrow-bar-right-open",
              152,
              "152",
              "arrow-bar-right-dot",
              252,
              "252",
              "arrow-bar-right-open-dot",
              352,
              "352",
              "arrow",
              53,
              "53",
              "arrow-open",
              153,
              "153",
              "arrow-dot",
              253,
              "253",
              "arrow-open-dot",
              353,
              "353",
              "arrow-wide",
              54,
              "54",
              "arrow-wide-open",
              154,
              "154",
              "arrow-wide-dot",
              254,
              "254",
              "arrow-wide-open-dot",
              354,
              "354"
            ],
            "dflt": "circle",
            "arrayOk": true,
            "editType": "style",
            "description": "The marker symbol of `node.render: 'sprite'`.",
            "valType": "enumerated"
          },
          "group": {
            "editType": "calc",
            "description": "A group per node (a name or a number; empty for none): colors the nodes by group, gives the legend one item per group, which a click hides, and keeps the nodes of a group together in the arrangements that can.",
            "valType": "data_array"
          },
          "customdata": {
            "editType": "calc",
            "description": "Extra data per node for `%{customdata}` and events.",
            "valType": "data_array"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "arrayOk": true,
            "editType": "style",
            "description": "Node opacity (multiplied by the trace `opacity`), or one per node.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "Outlines of the nodes (`node.render: 'sprite'` only).",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color of the nodes, or one per node. Default: the plot background, so that nodes stand out from the links and from each other.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 1,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width of the nodes in CSS px, or one per node.",
              "valType": "number"
            }
          },
          "textposition": {
            "values": [
              "auto",
              "top left",
              "top center",
              "top right",
              "middle left",
              "middle center",
              "middle right",
              "bottom left",
              "bottom center",
              "bottom right",
              "none"
            ],
            "dflt": "auto",
            "editType": "plot",
            "description": "Where the label sits relative to its node on screen. `'auto'`: to the right. `'none'` draws no labels (they still show in hover labels).",
            "valType": "enumerated"
          },
          "textfont": {
            "editType": "calc",
            "description": "Font of the node labels. Default: `layout.font`, with the automatic halo (`shadow: auto`). Family, size, weight and style set the size of box nodes.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "calc",
              "description": "CSS font-family list. Default: `layout.font.family`.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "calc",
              "description": "Font size in CSS px. Default: `layout.font.size`.",
              "valType": "number"
            },
            "color": {
              "editType": "plot",
              "description": "Text color. Default: `layout.font.color`; inside a box node, black or white, whichever reads better on the box.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "calc",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "calc",
              "description": "Font style.",
              "valType": "enumerated"
            },
            "shadow": {
              "editType": "plot",
              "description": "CSS `text-shadow` (first shadow only), `'none'`, or `'auto'` (the default): a thin halo in the text's contrast color, so labels read over the links.",
              "valType": "string"
            }
          },
          "hoverinfo": {
            "values": ["all", "none", "skip"],
            "dflt": "all",
            "editType": "none",
            "description": "Hover of the nodes: labels (`'all'`), events without labels (`'none'`) or no hover and no events (`'skip'`). Default: the trace `hoverinfo`.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the node hover labels: `%{label}`, `%{degree}`, `%{indegree}`, `%{outdegree}`, `%{group}`, `%{size}`, `%{color}`, `%{x}`, `%{y}`, `%{z}`, `%{customdata}`. `<extra>…</extra>` replaces the trace name.",
            "valType": "string"
          }
        },
        "link": {
          "editType": "calc",
          "description": "The links.",
          "role": "object",
          "source": {
            "editType": "calc",
            "role": "data",
            "description": "Source node index of every link. A link whose source or target is not a node is dropped.",
            "valType": "data_array"
          },
          "target": {
            "editType": "calc",
            "role": "data",
            "description": "Target node index of every link. A link from a node to itself is drawn as a ring beside the node, on the side away from its neighbours.",
            "valType": "data_array"
          },
          "value": {
            "editType": "calc",
            "role": "data",
            "description": "A positive number per link: its weight for the layouts (a stronger pull, a shorter link) and `%{value}` in hover labels. It sets the width only with `link.widthby: 'value'`. Missing or non-positive values count as 1.",
            "valType": "data_array"
          },
          "label": {
            "editType": "calc",
            "description": "Link labels, shown in hover labels.",
            "valType": "data_array"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Link color, or one per link. Default: a translucent gray that reads on the plot background, light or dark.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Link width in CSS px, or one per link: at every depth for lines; for tubes their diameter at the middle of the scene in its first view (see `link.render`). Ignored with `link.widthby`.",
            "valType": "number"
          },
          "widthby": {
            "values": ["none", "value"],
            "dflt": "none",
            "editType": "plot",
            "description": "`'value'`: widths from `link.value`, proportional to it, between the two widths of `link.widthrange` (the largest value gets the second).",
            "valType": "enumerated"
          },
          "widthrange": {
            "items": [
              {
                "min": 0,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [1, 8],
            "editType": "plot",
            "description": "With `link.widthby: 'value'`: the widths in CSS px of a link of value 0 and of the link with the largest value.",
            "valType": "info_array"
          },
          "curve": {
            "min": -2,
            "max": 2,
            "arrayOk": true,
            "editType": "plot",
            "description": "How far a link bows out, as a fraction of its length: 0 is straight. A link bows sideways: for someone who looks down the z axis, positive is to the left of its direction and negative to the right; a link that runs along z bows along y. One value, or one per link. Default: straight, except that the links between the same two nodes are fanned out so that each can be seen, two opposite links bowing apart.",
            "valType": "number"
          },
          "dash": {
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style of the links drawn as lines: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
            "valType": "string"
          },
          "render": {
            "values": ["auto", "line", "tube"],
            "dflt": "auto",
            "editType": "plot",
            "description": "`'line'`: screen-space lines, `link.width` CSS px wide at every depth. `'tube'`: lit tubes `link.width` across, which are part of the scene like the spheres. `'auto'`: tubes when the widest link is 3 px or wider and the graph has at most 5,000 links, else lines.",
            "valType": "enumerated"
          },
          "arrow": {
            "editType": "plot",
            "description": "Arrowheads, as cones. Their tips stop at the node's surface, whatever its size.",
            "role": "object",
            "end": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw an arrowhead at the target end of every link (a directed graph). Default: `true` with `arrangement: 'layered'`, whose links all run from a plane to a later one, else `false`.",
              "valType": "boolean"
            },
            "start": {
              "dflt": false,
              "editType": "plot",
              "description": "Draw an arrowhead at the source end of every link.",
              "valType": "boolean"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "editType": "plot",
              "description": "Length of the arrowheads (lit cones) in CSS px, measured like `node.size`; a wide link gets a head at least three times its width.",
              "valType": "number"
            }
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "editType": "style",
            "description": "Link opacity (multiplied by the trace `opacity` and the color alpha).",
            "valType": "number"
          },
          "customdata": {
            "editType": "calc",
            "description": "Extra data per link for `%{customdata}` and events.",
            "valType": "data_array"
          },
          "hoverinfo": {
            "values": ["all", "none", "skip"],
            "dflt": "all",
            "editType": "none",
            "description": "Hover of the links: labels (`'all'`), events without labels (`'none'`) or no hover and no events (`'skip'`). Default: the trace `hoverinfo`.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the link hover labels: `%{label}`, `%{value}`, `%{source.label}`, `%{target.label}`, `%{source.index}`, `%{target.index}`, `%{customdata}`. `<extra>…</extra>` replaces the trace name.",
            "valType": "string"
          }
        },
        "force": {
          "editType": "calc",
          "description": "Options of the force layout in three dimensions: of `arrangement: 'force'`, and of the nodes within their planes with `'layered'` (where `linkdistance` defaults to `layered.ranksep`). Lengths are layout units.",
          "role": "object",
          "algorithm": {
            "values": ["spring", "forceatlas2"],
            "dflt": "spring",
            "editType": "calc",
            "description": "The model of the simulation. `'spring'`: links are springs with a rest length and every two nodes repel (the d3-force model); even link lengths, the usual choice. `'forceatlas2'`: links pull in proportion to their length and nodes repel in proportion to their degrees (ForceAtlas2); it pulls communities apart better in graphs with hubs.",
            "valType": "enumerated"
          },
          "seed": {
            "min": 0,
            "dflt": 1,
            "editType": "calc",
            "description": "Seed of the generator that separates nodes at the same place. The layout is deterministic: the same figure gives the same positions everywhere; another seed gives another, equally valid, layout of graphs that have such nodes.",
            "valType": "integer"
          },
          "ticks": {
            "min": 1,
            "editType": "calc",
            "description": "Steps of the simulation from its start to rest; the cooling is spread over them. More steps untangle a graph better and take longer. Default: 600 up to 500 nodes, fewer for larger graphs (300 from 1,000 to 3,000 nodes, 90 at 10,000).",
            "valType": "integer"
          },
          "linkdistance": {
            "min": 0,
            "dflt": 30,
            "editType": "calc",
            "description": "`'spring'`: the rest length of a link, in layout units (CSS px before the graph is fitted to the plot area). Links end up longer where the repulsion of their nodes stretches them.",
            "valType": "number"
          },
          "linkstrength": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "`'spring'`: how hard a link pulls its nodes to its rest length, 0 to 1. Default: per link, 1 / the smaller degree of its two nodes, so that the links of a hub do not crush its neighbours onto it.",
            "valType": "number"
          },
          "linkweight": {
            "values": ["strength", "distance", "none"],
            "dflt": "strength",
            "editType": "calc",
            "description": "What `link.value` does to a link: `'strength'`: a larger value pulls harder; `'distance'`: a larger value makes the link shorter (`'spring'` only; as `'strength'` for `'forceatlas2'`); `'none'`: nothing.",
            "valType": "enumerated"
          },
          "charge": {
            "dflt": -60,
            "editType": "calc",
            "description": "`'spring'`: the strength of the force between every two nodes: negative values push them apart (the more negative, the larger and more open the layout), positive ones pull them together.",
            "valType": "number"
          },
          "gravity": {
            "min": 0,
            "editType": "calc",
            "description": "The pull toward the center, which keeps the parts of a graph that are not linked from drifting apart. `'spring'`: each connected part is pulled as a whole (default 0.05). `'forceatlas2'`: every node is pulled, the more links it has the harder (default 1).",
            "valType": "number"
          },
          "collide": {
            "dflt": true,
            "editType": "calc",
            "description": "Keep nodes from overlapping, each taken as a circle around its marker or box.",
            "valType": "boolean"
          },
          "collidepadding": {
            "min": 0,
            "dflt": 2,
            "editType": "calc",
            "description": "With `collide`: the room left between two nodes, in layout units.",
            "valType": "number"
          },
          "groupstrength": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "The pull of every node toward the middle of its group (`node.group`), which keeps the nodes of a group together even where the links do not. 0.05 to 0.3 are usual values.",
            "valType": "number"
          },
          "scalingratio": {
            "min": 0,
            "editType": "calc",
            "description": "`'forceatlas2'`: the repulsion between nodes; a larger value gives a larger, more open layout. Default: 10, or 1 with `linlog`.",
            "valType": "number"
          },
          "linlog": {
            "dflt": false,
            "editType": "calc",
            "description": "`'forceatlas2'`: links pull with the logarithm of their length instead of the length: tighter and better separated clusters.",
            "valType": "boolean"
          }
        },
        "highlight": {
          "editType": "style",
          "description": "Highlighting: the neighbourhood of the node or link under the pointer (or of `highlight.nodes`), and a shortest path between the two nodes of `highlight.path`. What is highlighted keeps its look, its label shows even where there was no room for it, and everything else is dimmed; only colors change. A hover comes first, then `highlight.nodes`, then a path.",
          "role": "object",
          "mode": {
            "flags": ["neighbors"],
            "extras": ["none"],
            "dflt": "neighbors",
            "editType": "style",
            "description": "What a hover emphasizes, the rest of the graph being dimmed (`highlight.dim`). `'neighbors'`: while the pointer is over a node, the node, the links that lead from it and the nodes they lead to (`highlight.hops`, `highlight.direction`); over a link, the link and its two ends. `'none'`: nothing. What is hovered is what the scene's picking finds, so there is no highlight where hover is off (`scene.hovermode: false`, `hoverinfo: 'skip'`), and none for a graph of more than 50,000 nodes and links together.",
            "valType": "flaglist"
          },
          "hops": {
            "min": 0,
            "dflt": 1,
            "editType": "style",
            "description": "With `'neighbors'`: how many links away from the hovered node the highlight reaches. 1: its neighbours; 2: their neighbours too; 0: the node alone. The links between two nodes that are both at the last hop are not part of it.",
            "valType": "integer"
          },
          "direction": {
            "values": ["both", "out", "in"],
            "dflt": "both",
            "editType": "style",
            "description": "With `'neighbors'`: which links are followed from the hovered node, and from each node reached. `'both'`: all of them. `'out'`: only from a link's source to its target, which gives what the node leads to (its descendants). `'in'`: only from target to source: what leads to it (its ancestors).",
            "valType": "enumerated"
          },
          "dim": {
            "min": 0,
            "max": 1,
            "dflt": 0.15,
            "editType": "style",
            "description": "How much is left of the nodes, links and labels that are not highlighted while something is: lines and labels keep this share of their opacity; spheres, tubes and arrowheads, which are lit and opaque, this share of their color over the background.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the highlighted links. Default: each link's own color, made opaque.",
            "valType": "color"
          },
          "nodes": {
            "editType": "style",
            "description": "Node indices whose neighbourhood is highlighted as a hover on each of them would (`highlight.hops`, `highlight.direction`), whatever `highlight.mode` says, until this is unset: for a highlight that the app drives (a search box, a linked view, a story). The pointer over a node or link takes its place while it is there.",
            "valType": "data_array"
          },
          "path": {
            "items": [
              {
                "min": 0,
                "editType": "style",
                "valType": "integer"
              },
              {
                "min": 0,
                "editType": "style",
                "valType": "integer"
              }
            ],
            "editType": "style",
            "description": "Two node indices: a shortest path from the first to the second is highlighted until this is unset. Nothing is highlighted when there is no such path.",
            "valType": "info_array"
          },
          "pathweight": {
            "values": ["hops", "value"],
            "dflt": "hops",
            "editType": "style",
            "description": "What makes a path short. `'hops'`: the number of its links. `'value'`: the sum of its links' `link.value`, each taken as a cost or a distance (a link without a positive value costs 1).",
            "valType": "enumerated"
          },
          "pathdirected": {
            "editType": "style",
            "description": "Whether a path follows every link from its source to its target only. Default: `true` when the links have arrowheads at their targets (`link.arrow.end`), else `false`: a path may run along a link either way.",
            "valType": "boolean"
          }
        },
        "layered": {
          "editType": "calc",
          "description": "The layout of `arrangement: 'layered'`: cycles are broken as in the 2D layered layout (the reversed links keep their direction in the drawing), every node gets a rank, each rank is a plane, and the nodes of a plane are spread by the force layout (`force`) with their coordinate along `axis` held.",
          "role": "object",
          "axis": {
            "values": ["x", "y", "z"],
            "dflt": "z",
            "editType": "calc",
            "description": "The axis the planes are stacked along. The first rank is at the top of it (the largest coordinate), and links run down.",
            "valType": "enumerated"
          },
          "ranksep": {
            "min": 0,
            "dflt": 80,
            "editType": "calc",
            "description": "Distance between two planes, in layout units.",
            "valType": "number"
          },
          "ranker": {
            "values": ["network-simplex", "tight-tree", "longest-path"],
            "dflt": "network-simplex",
            "editType": "calc",
            "description": "How nodes get their layer. `'network-simplex'`: the layers that make the links shortest in total. `'tight-tree'`: its starting point, faster and nearly as short. `'longest-path'`: every node as early as its links allow, the fastest, with longer links.",
            "valType": "enumerated"
          },
          "showplanes": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw a faint outline around every plane.",
            "valType": "boolean"
          },
          "planecolor": {
            "editType": "style",
            "description": "Color of the plane outlines. Default: the link color, fainter.",
            "valType": "color"
          }
        }
      }
    },
    "icicle": {
      "categories": ["domain", "icicle"],
      "meta": {
        "description": "Icicle charts: a hierarchy as rows or columns of cells sized by value, placed by `domain`, with a path bar and animated drill-down, drawn as one instanced GPU rect set with batched SDF labels.",
        "docsPage": "icicle",
        "plotlyEquivalent": "icicle"
      },
      "attributes": {
        "description": "Icicle: a hierarchy as rows (or columns) of cells, children next to their parents, with a path bar and drill-down.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": [
            "label",
            "text",
            "value",
            "name",
            "current path",
            "percent root",
            "percent entry",
            "percent parent"
          ],
          "extras": ["all", "none", "skip"],
          "dflt": "label+text+value+name",
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show, in a fixed order (percentages read `'25% of Eve'`); `'skip'` also turns hover events off for this trace.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "labels": {
          "editType": "calc",
          "role": "data",
          "description": "Label of each cell. Without `ids`, labels are also the node ids `parents` refer to, so they must be unique among parents.",
          "valType": "data_array"
        },
        "parents": {
          "editType": "calc",
          "role": "data",
          "description": "Parent of each node: its id (an `ids` entry, else a `labels` entry). `''` marks a root; several roots get a generated root above them. Without any `''`, the one parent that is not a node becomes the root.",
          "valType": "data_array"
        },
        "values": {
          "editType": "calc",
          "role": "data",
          "description": "Value of each cell, a number ≥ 0 (rows with other values are dropped). How branches add up is `branchvalues`; without `values`, nodes are sized by `count`.",
          "valType": "data_array"
        },
        "branchvalues": {
          "values": ["remainder", "total"],
          "dflt": "remainder",
          "editType": "calc",
          "description": "How `values` of branches are read: `remainder` adds each node's value to its descendants' (a branch is bigger than its children), `total` takes it as the branch's total, which must not be less than its children's sum (the trace is not drawn otherwise).",
          "valType": "enumerated"
        },
        "count": {
          "flags": ["branches", "leaves"],
          "dflt": "leaves",
          "editType": "calc",
          "description": "Without `values`: what a node counts to size it — the leaves below it, its branches, or both.",
          "valType": "flaglist"
        },
        "level": {
          "editType": "plot",
          "description": "Id of the node shown as the root (the entry): `''` or unset for the whole hierarchy. Clicking a node sets it (drill-down); clicking the entry goes back up.",
          "valType": "any"
        },
        "maxdepth": {
          "dflt": -1,
          "editType": "plot",
          "description": "Levels drawn from the entry down, the entry included; -1 draws them all. Deeper nodes appear when drilling in.",
          "valType": "integer"
        },
        "tiling": {
          "editType": "calc",
          "description": "How cells are laid out.",
          "role": "object",
          "orientation": {
            "values": ["v", "h"],
            "dflt": "h",
            "editType": "plot",
            "description": "Direction levels go in: `h` from left to right (right to left with `flip: x`), `v` from top to bottom (bottom to top with `flip: y`).",
            "valType": "enumerated"
          },
          "flip": {
            "flags": ["x", "y"],
            "dflt": "",
            "editType": "plot",
            "description": "Mirror the layout along x and / or y.",
            "valType": "flaglist"
          },
          "pad": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Gap between cells, px.",
            "valType": "number"
          }
        },
        "marker": {
          "editType": "calc",
          "description": "Cell style.",
          "role": "object",
          "colors": {
            "editType": "calc",
            "description": "Color of each cell: CSS colors, or numbers mapped through `colorscale`. Unset cells take `layout.<type>colorway` colors on the first level and their parent's color below it.",
            "valType": "data_array"
          },
          "colorscale": {
            "editType": "calc",
            "description": "Colorscale for numeric `marker.colors` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "calc",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "calc",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "calc",
            "description": "Compute the color domain from the numeric `marker.colors` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "calc",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "calc",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "calc",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "calc",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "calc",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "line": {
            "editType": "calc",
            "description": "Cell outlines.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color, or one per cell. Default: `paper_bgcolor`.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 1,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width in CSS px (centered on the edge), or one per cell.",
              "valType": "number"
            }
          },
          "pattern": {
            "editType": "style",
            "description": "Hatch pattern of the cell fill (drawn in screen px, for print and grayscale).",
            "role": "object",
            "shape": {
              "values": ["", "/", "\\", "x", "-", "|", "+", "."],
              "dflt": "",
              "arrayOk": true,
              "editType": "style",
              "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none, or one per cell.",
              "valType": "enumerated"
            },
            "fillmode": {
              "values": ["replace", "overlay"],
              "dflt": "replace",
              "editType": "style",
              "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
              "valType": "enumerated"
            },
            "bgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent, or one per cell.",
              "valType": "color"
            },
            "fgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`, or one per cell.",
              "valType": "color"
            },
            "fgopacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "arrayOk": true,
              "editType": "style",
              "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots, or one per cell.",
              "valType": "number"
            },
            "solidity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "arrayOk": true,
              "editType": "style",
              "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color, or one per cell.",
              "valType": "number"
            }
          }
        },
        "leaf": {
          "editType": "plot",
          "description": "Leaf style.",
          "role": "object",
          "opacity": {
            "min": 0,
            "max": 1,
            "editType": "style",
            "description": "Opacity of the leaves (nodes without children). Default 1 with a colorscale, else 0.7.",
            "valType": "number"
          }
        },
        "root": {
          "editType": "calc",
          "description": "Root style.",
          "role": "object",
          "color": {
            "dflt": "rgba(0,0,0,0)",
            "editType": "calc",
            "description": "Color of the root node (transparent by default).",
            "valType": "color"
          }
        },
        "sort": {
          "dflt": true,
          "editType": "calc",
          "description": "Order siblings by value, largest first; otherwise in data order.",
          "valType": "boolean"
        },
        "pathbar": {
          "editType": "calc",
          "description": "The path bar: where the current root sits in the hierarchy.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Whether the path bar is drawn: the ancestors of the current root (`level`) as a bar outside the `domain`, one pixel away. Clicking a segment goes up to it.",
            "valType": "boolean"
          },
          "side": {
            "values": ["top", "bottom"],
            "dflt": "top",
            "editType": "plot",
            "description": "Side of the chart the path bar is on.",
            "valType": "enumerated"
          },
          "edgeshape": {
            "values": [">", "<", "|", "/", "\\"],
            "dflt": ">",
            "editType": "plot",
            "description": "Shape of the edges between path bar segments.",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 12,
            "editType": "plot",
            "description": "Thickness of the path bar in px. Default: `pathbar.textfont.size` plus 3 px on each side.",
            "valType": "number"
          },
          "textfont": {
            "editType": "plot",
            "description": "Font of path bar labels. Defaults to `textfont`, with a color contrasting the segment.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "plot",
              "description": "CSS font-family list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "plot",
              "description": "Font size in CSS px, or one per node.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "plot",
              "description": "Text color, or one per node.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "plot",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "text": {
          "editType": "plot",
          "description": "Text per cell, shown with the `text` flag of `textinfo`, and in hover labels unless `hovertext` is set.",
          "valType": "data_array"
        },
        "textinfo": {
          "flags": [
            "label",
            "text",
            "value",
            "current path",
            "percent root",
            "percent entry",
            "percent parent"
          ],
          "extras": ["none"],
          "editType": "plot",
          "description": "What node labels show, one per line in a fixed order: label, value, current path, the percentages (of the parent, the entry, the root; `'25% of parent'` when several), text. Default `'label'`, `'text+label'` when `text` is an array. Use `texttemplate` for other layouts.",
          "valType": "flaglist"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for node labels, overriding `textinfo`: `%{label}`, `%{value}`, `%{currentPath}`, `%{percentParent}`, `%{parent}`, `%{percentEntry}`, `%{entry}`, `%{percentRoot}`, `%{root}`, `%{text}`, `%{color}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{percentRoot:.1%}`).",
          "valType": "string"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of node labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextfont": {
          "editType": "plot",
          "description": "Font of labels inside nodes. Defaults to `textfont`, with a color contrasting the node.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "outsidetextfont": {
          "editType": "plot",
          "description": "Font of the root's label when the root is transparent (it sits on the background; not with a colorscale or several roots). Defaults to `textfont`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "textposition": {
          "values": [
            "top left",
            "top center",
            "top right",
            "middle left",
            "middle center",
            "middle right",
            "bottom left",
            "bottom center",
            "bottom right"
          ],
          "dflt": "top left",
          "editType": "plot",
          "description": "Where labels sit in their tiles. Branch labels (headers) sit in the top padding, or the bottom one for the `bottom` positions.",
          "valType": "enumerated"
        },
        "depth": {
          "dflt": 0,
          "editType": "plot",
          "description": "Extrusion toward the viewer (Holochart extension, 2.5D): CSS px, a percentage of each shape's width (`'60%'`), or one number per item. 0 (default) draws the trace flat. Seen in perspective with `layout.view3d`; in the flat view extruded shapes are lit from the front.",
          "valType": "any"
        },
        "bevel": {
          "editType": "plot",
          "description": "Rounded edges of extruded shapes (with `depth`).",
          "role": "object",
          "size": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Radius of the rounded front and side edges, CSS px (at most half the size).",
            "valType": "number"
          },
          "segments": {
            "min": 1,
            "max": 16,
            "dflt": 3,
            "editType": "plot",
            "description": "Segments of each rounded edge.",
            "valType": "integer"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of extruded shapes (with `depth`): Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "tilt": {
          "min": -80,
          "max": 80,
          "dflt": 0,
          "editType": "plot",
          "animatable": true,
          "description": "Tilt of the trace in 2.5D (Holochart extension), degrees: positive looks from above, 0 (default) is the flat view. With `depth`, slices and tiles show their sides.",
          "valType": "number"
        },
        "perspective": {
          "min": 0,
          "max": 1,
          "dflt": 0.5,
          "editType": "plot",
          "animatable": true,
          "description": "Strength of the perspective of a tilted or extruded trace: 0 is a parallel projection, 1 a strong one.",
          "valType": "number"
        }
      }
    },
    "sankey": {
      "categories": ["domain", "noOpacity"],
      "meta": {
        "description": "Sankey diagram: flows between nodes as links as wide as their value, nodes in columns sized by their flow; cycles drawn as loops, nodes draggable.",
        "docsPage": "sankey",
        "plotlyEquivalent": "sankey"
      },
      "attributes": {
        "description": "Sankey diagram: nodes in columns sized by their flow and links between them as wide as their value; cycles are drawn as loops; drag nodes to rearrange.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": [],
          "extras": ["all", "none", "skip"],
          "dflt": "all",
          "editType": "none",
          "description": "Hover of nodes and links: labels (`'all'`), highlighting without labels (`'none'`) or no hover at all (`'skip'`). The default of `node.hoverinfo` and `link.hoverinfo`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "orientation": {
          "values": ["v", "h"],
          "dflt": "h",
          "editType": "calc",
          "description": "Flow direction: left to right (`'h'`) or top to bottom (`'v'`, the whole diagram transposed).",
          "valType": "enumerated"
        },
        "valueformat": {
          "dflt": ".3s",
          "editType": "none",
          "description": "d3-format of the node and link values in hover labels (`%{value}`).",
          "valType": "string"
        },
        "valuesuffix": {
          "dflt": "",
          "editType": "none",
          "description": "Text after the values in hover labels (a unit such as `TWh`).",
          "valType": "string"
        },
        "arrangement": {
          "values": ["snap", "perpendicular", "freeform", "fixed"],
          "dflt": "snap",
          "editType": "calc",
          "description": "Node dragging. `'snap'`: a node moves freely while dragged, the other nodes of its column make room, and it snaps back to its column when released. `'perpendicular'`: across the flow only. `'freeform'`: anywhere. `'fixed'`: nodes do not move. A drop restyles `node.x` / `node.y` of every node. Default: `'freeform'` when `node.x` and `node.y` are given, else `'snap'`.",
          "valType": "enumerated"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the node labels. Default: `layout.font`, with the automatic halo (`shadow: auto`).",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "editType": "plot",
            "description": "Font size in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "plot",
            "description": "Text color. Default: `layout.font.color`.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          },
          "shadow": {
            "editType": "plot",
            "description": "CSS `text-shadow` (first shadow only), `'none'`, or `'auto'` (the default): a thin halo in the text's contrast color, so labels read over the links.",
            "valType": "string"
          }
        },
        "node": {
          "editType": "calc",
          "description": "The nodes.",
          "role": "object",
          "label": {
            "editType": "calc",
            "role": "data",
            "description": "Node labels, one per node index (Plotly pseudo-HTML allowed). A group made by `node.groups` takes the label after the last node referenced by a link.",
            "valType": "data_array"
          },
          "groups": {
            "items": {
              "items": {
                "min": 0,
                "editType": "calc",
                "valType": "number"
              },
              "freeLength": true,
              "editType": "calc",
              "valType": "info_array"
            },
            "freeLength": true,
            "dflt": [],
            "editType": "calc",
            "description": "Groups of node indices, each drawn as one combined node: links between members of a group are dropped, links to and from members attach to the group.",
            "valType": "info_array"
          },
          "x": {
            "editType": "calc",
            "description": "Fixed node positions along the flow: the node center as a fraction of the domain (0 left, 1 right; top to bottom when vertical). Used with `node.y`; a position of 0 or a missing one leaves the node where the layout puts it (Plotly).",
            "valType": "data_array"
          },
          "y": {
            "editType": "calc",
            "description": "Fixed node positions across the flow: the node center as a fraction of the domain (0 top, 1 bottom; left to right when vertical). Used with `node.x`.",
            "valType": "data_array"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Node color, or one per node index. Default: the colorway, one color per node at 0.8 opacity.",
            "valType": "color"
          },
          "customdata": {
            "editType": "calc",
            "description": "Extra data per node for `%{customdata}` and events.",
            "valType": "data_array"
          },
          "line": {
            "editType": "style",
            "description": "Outlines of the nodes.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color of the nodes, or one per node.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 0.5,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width of the nodes in CSS px, or one per node.",
              "valType": "number"
            }
          },
          "pad": {
            "min": 0,
            "dflt": 20,
            "editType": "calc",
            "description": "Space between the nodes of a column in CSS px (reduced when the column would not fit).",
            "valType": "number"
          },
          "thickness": {
            "min": 1,
            "dflt": 20,
            "editType": "calc",
            "description": "Node thickness along the flow direction, in CSS px.",
            "valType": "number"
          },
          "align": {
            "values": ["justify", "left", "right", "center"],
            "dflt": "justify",
            "editType": "calc",
            "description": "Column of nodes: by depth from the sources, sinks in the last column (`'justify'`); by depth (`'left'`); by height from the sinks (`'right'`); or by depth with sources next to their first target (`'center'`).",
            "valType": "enumerated"
          },
          "hoverinfo": {
            "values": ["all", "none", "skip"],
            "dflt": "all",
            "editType": "none",
            "description": "Hover of the nodes: labels (`'all'`), highlighting without labels (`'none'`) or no hover and no events (`'skip'`). Default: the trace `hoverinfo`.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the node hover labels: `%{label}`, `%{value}` (formatted with `valueformat` and `valuesuffix`), `%{customdata}`, `%{color}`, `%{targetLinks.length}` (incoming links), `%{sourceLinks.length}`, … `<extra>…</extra>` replaces the value box.",
            "valType": "string"
          }
        },
        "link": {
          "editType": "calc",
          "description": "The links.",
          "role": "object",
          "arrowlen": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Length of the arrowhead at the target end of every link, in CSS px (at most half the gap between the nodes); 0 draws no arrowheads.",
            "valType": "number"
          },
          "label": {
            "editType": "calc",
            "description": "Link labels: shown in hover labels, links with the same label highlight together, and a label names the `link.colorscales` entry of the link.",
            "valType": "data_array"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Link color, or one per link. Default: translucent black on light paper, translucent white on dark paper.",
            "valType": "color"
          },
          "hovercolor": {
            "arrayOk": true,
            "editType": "style",
            "description": "Link color while it (or a node it connects) is hovered, or one per link. Default: the link color 0.2 more opaque (brightened on dark paper, darkened on light paper when already that opaque).",
            "valType": "color"
          },
          "customdata": {
            "editType": "calc",
            "description": "Extra data per link for `%{customdata}` and events.",
            "valType": "data_array"
          },
          "line": {
            "editType": "style",
            "description": "Outlines of the links.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color of the links, or one per link.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width of the links in CSS px, or one per link.",
              "valType": "number"
            }
          },
          "source": {
            "editType": "calc",
            "role": "data",
            "description": "Source node index of every link.",
            "valType": "data_array"
          },
          "target": {
            "editType": "calc",
            "role": "data",
            "description": "Target node index of every link.",
            "valType": "data_array"
          },
          "value": {
            "editType": "calc",
            "role": "data",
            "description": "Flow of every link, which sets its width. Links without a positive value are dropped.",
            "valType": "data_array"
          },
          "hoverinfo": {
            "values": ["all", "none", "skip"],
            "dflt": "all",
            "editType": "none",
            "description": "Hover of the links: labels (`'all'`), highlighting without labels (`'none'`) or no hover and no events (`'skip'`). Default: the trace `hoverinfo`.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the link hover labels: `%{label}`, `%{value}` (formatted with `valueformat` and `valuesuffix`), `%{source.label}`, `%{target.label}`, `%{flow.labelConcentration}`, `%{customdata}`, … `<extra>…</extra>` replaces the value box.",
            "valType": "string"
          },
          "flow": {
            "editType": "style",
            "description": "Flow particles (a Holochart extension): dots streaming along every link from its source to its target, spread across its width, as many as its size and `density` call for. Off unless `link.flow` is set (`flow: {}` turns them on). They dim with links outside a hover highlight, and hold still under `prefers-reduced-motion: reduce`.",
            "role": "object",
            "density": {
              "min": 0,
              "dflt": 2,
              "arrayOk": true,
              "editType": "style",
              "description": "Particles per 100 px of link length for every 10 px of link width (thinner links get one lane), or one density per link; 0 draws none.",
              "valType": "number"
            },
            "speed": {
              "min": 0,
              "dflt": 50,
              "arrayOk": true,
              "editType": "style",
              "description": "Particle speed along the link in CSS px per second, or one per link; 0 holds the particles still.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 3,
              "arrayOk": true,
              "editType": "style",
              "description": "Particle diameter in CSS px, or one per link.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Particle color, or one per link. Default: the link color, opaque.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "editType": "style",
              "description": "Particle opacity.",
              "valType": "number"
            },
            "time": {
              "editType": "style",
              "description": "Freeze the particles where they are this many seconds into the animation: a still frame, e.g. for image export and visual tests. Default: the particles move.",
              "valType": "number"
            }
          },
          "colorscales": {
            "editType": "calc",
            "description": "Concentration colorscales: links labeled `label` are colored by their share of the flow between their two nodes (the links sharing the source and target), mapped from `cmin`–`cmax` through `colorscale`. Hover labels then show the concentration.",
            "itemName": "concentrationscales",
            "role": "items",
            "items": {
              "role": "object",
              "label": {
                "dflt": "",
                "editType": "calc",
                "description": "The link label this colorscale applies to.",
                "valType": "string"
              },
              "cmin": {
                "dflt": 0,
                "editType": "calc",
                "description": "Concentration mapped to the first color.",
                "valType": "number"
              },
              "cmax": {
                "dflt": 1,
                "editType": "calc",
                "description": "Concentration mapped to the last color.",
                "valType": "number"
              },
              "colorscale": {
                "dflt": [
                  [0, "white"],
                  [1, "black"]
                ],
                "editType": "calc",
                "description": "Colorscale of the concentration.",
                "valType": "colorscale"
              },
              "name": {
                "editType": "none",
                "description": "Name of this concentrationscales, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template concentrationscales to inherit from. If no template item matches, this concentrationscales is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          }
        }
      }
    },
    "sunburst": {
      "categories": ["domain", "sunburst"],
      "meta": {
        "description": "Sunburst charts: a hierarchy as rings of sectors sized by value, placed by `domain`, with animated drill-down, drawn as one instanced GPU arc set with batched SDF labels.",
        "docsPage": "sunburst",
        "plotlyEquivalent": "sunburst"
      },
      "attributes": {
        "description": "Sunburst: a hierarchy as rings of sectors, children outside their parents, with drill-down.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": [
            "label",
            "text",
            "value",
            "name",
            "current path",
            "percent root",
            "percent entry",
            "percent parent"
          ],
          "extras": ["all", "none", "skip"],
          "dflt": "label+text+value+name",
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show, in a fixed order (percentages read `'25% of Eve'`); `'skip'` also turns hover events off for this trace.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "labels": {
          "editType": "calc",
          "role": "data",
          "description": "Label of each sector. Without `ids`, labels are also the node ids `parents` refer to, so they must be unique among parents.",
          "valType": "data_array"
        },
        "parents": {
          "editType": "calc",
          "role": "data",
          "description": "Parent of each node: its id (an `ids` entry, else a `labels` entry). `''` marks a root; several roots get a generated root above them. Without any `''`, the one parent that is not a node becomes the root.",
          "valType": "data_array"
        },
        "values": {
          "editType": "calc",
          "role": "data",
          "description": "Value of each sector, a number ≥ 0 (rows with other values are dropped). How branches add up is `branchvalues`; without `values`, nodes are sized by `count`.",
          "valType": "data_array"
        },
        "branchvalues": {
          "values": ["remainder", "total"],
          "dflt": "remainder",
          "editType": "calc",
          "description": "How `values` of branches are read: `remainder` adds each node's value to its descendants' (a branch is bigger than its children), `total` takes it as the branch's total, which must not be less than its children's sum (the trace is not drawn otherwise).",
          "valType": "enumerated"
        },
        "count": {
          "flags": ["branches", "leaves"],
          "dflt": "leaves",
          "editType": "calc",
          "description": "Without `values`: what a node counts to size it — the leaves below it, its branches, or both.",
          "valType": "flaglist"
        },
        "level": {
          "editType": "plot",
          "description": "Id of the node shown as the root (the entry): `''` or unset for the whole hierarchy. Clicking a node sets it (drill-down); clicking the entry goes back up.",
          "valType": "any"
        },
        "maxdepth": {
          "dflt": -1,
          "editType": "plot",
          "description": "Levels drawn from the entry down, the entry included; -1 draws them all. Deeper nodes appear when drilling in.",
          "valType": "integer"
        },
        "marker": {
          "editType": "calc",
          "description": "Sector style.",
          "role": "object",
          "colors": {
            "editType": "calc",
            "description": "Color of each sector: CSS colors, or numbers mapped through `colorscale`. Unset sectors take `layout.<type>colorway` colors on the first level and their parent's color below it.",
            "valType": "data_array"
          },
          "colorscale": {
            "editType": "calc",
            "description": "Colorscale for numeric `marker.colors` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "calc",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "calc",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "calc",
            "description": "Compute the color domain from the numeric `marker.colors` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "calc",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "calc",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "calc",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "calc",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "calc",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "line": {
            "editType": "calc",
            "description": "Sector outlines.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color, or one per sector. Default: `paper_bgcolor`.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 1,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width in CSS px (centered on the edge), or one per sector.",
              "valType": "number"
            }
          },
          "pattern": {
            "editType": "style",
            "description": "Hatch pattern of the sector fill (drawn in screen px, for print and grayscale).",
            "role": "object",
            "shape": {
              "values": ["", "/", "\\", "x", "-", "|", "+", "."],
              "dflt": "",
              "arrayOk": true,
              "editType": "style",
              "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none, or one per sector.",
              "valType": "enumerated"
            },
            "fillmode": {
              "values": ["replace", "overlay"],
              "dflt": "replace",
              "editType": "style",
              "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
              "valType": "enumerated"
            },
            "bgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent, or one per sector.",
              "valType": "color"
            },
            "fgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`, or one per sector.",
              "valType": "color"
            },
            "fgopacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "arrayOk": true,
              "editType": "style",
              "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots, or one per sector.",
              "valType": "number"
            },
            "solidity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "arrayOk": true,
              "editType": "style",
              "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color, or one per sector.",
              "valType": "number"
            }
          }
        },
        "leaf": {
          "editType": "plot",
          "description": "Leaf style.",
          "role": "object",
          "opacity": {
            "min": 0,
            "max": 1,
            "editType": "style",
            "description": "Opacity of the leaves (nodes without children). Default 1 with a colorscale, else 0.7.",
            "valType": "number"
          }
        },
        "root": {
          "editType": "calc",
          "description": "Root style.",
          "role": "object",
          "color": {
            "dflt": "rgba(0,0,0,0)",
            "editType": "calc",
            "description": "Color of the root node (transparent by default).",
            "valType": "color"
          }
        },
        "sort": {
          "dflt": true,
          "editType": "calc",
          "description": "Order siblings by value, largest first; otherwise in data order.",
          "valType": "boolean"
        },
        "text": {
          "editType": "plot",
          "description": "Text per sector, shown with the `text` flag of `textinfo`, and in hover labels unless `hovertext` is set.",
          "valType": "data_array"
        },
        "textinfo": {
          "flags": [
            "label",
            "text",
            "value",
            "current path",
            "percent root",
            "percent entry",
            "percent parent"
          ],
          "extras": ["none"],
          "editType": "plot",
          "description": "What node labels show, one per line in a fixed order: label, value, current path, the percentages (of the parent, the entry, the root; `'25% of parent'` when several), text. Default `'label'`, `'text+label'` when `text` is an array. Use `texttemplate` for other layouts.",
          "valType": "flaglist"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for node labels, overriding `textinfo`: `%{label}`, `%{value}`, `%{currentPath}`, `%{percentParent}`, `%{parent}`, `%{percentEntry}`, `%{entry}`, `%{percentRoot}`, `%{root}`, `%{text}`, `%{color}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{percentRoot:.1%}`).",
          "valType": "string"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of node labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextfont": {
          "editType": "plot",
          "description": "Font of labels inside nodes. Defaults to `textfont`, with a color contrasting the node.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "outsidetextfont": {
          "editType": "plot",
          "description": "Font of the root's label when the root is transparent (it sits on the background; not with a colorscale or several roots). Defaults to `textfont`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextorientation": {
          "values": ["horizontal", "radial", "tangential", "auto"],
          "dflt": "auto",
          "editType": "plot",
          "description": "Orientation of labels inside sectors: `horizontal`, `radial` (along the radius), `tangential` (across it), or `auto` (whichever is largest).",
          "valType": "enumerated"
        },
        "rotation": {
          "dflt": 0,
          "editType": "plot",
          "description": "Rotates the whole diagram counterclockwise by this many degrees. By default the first sector starts at 3 o'clock.",
          "valType": "angle"
        }
      }
    },
    "treemap": {
      "categories": ["domain", "treemap"],
      "meta": {
        "description": "Treemaps: a hierarchy as nested rectangles sized by value, placed by `domain`, with a path bar and animated drill-down, drawn as one instanced GPU rect set with batched SDF labels.",
        "docsPage": "treemap",
        "plotlyEquivalent": "treemap"
      },
      "attributes": {
        "description": "Treemap: a hierarchy as nested rectangles sized by value, with a path bar and drill-down.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": [
            "label",
            "text",
            "value",
            "name",
            "current path",
            "percent root",
            "percent entry",
            "percent parent"
          ],
          "extras": ["all", "none", "skip"],
          "dflt": "label+text+value+name",
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show, in a fixed order (percentages read `'25% of Eve'`); `'skip'` also turns hover events off for this trace.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "labels": {
          "editType": "calc",
          "role": "data",
          "description": "Label of each tile. Without `ids`, labels are also the node ids `parents` refer to, so they must be unique among parents.",
          "valType": "data_array"
        },
        "parents": {
          "editType": "calc",
          "role": "data",
          "description": "Parent of each node: its id (an `ids` entry, else a `labels` entry). `''` marks a root; several roots get a generated root above them. Without any `''`, the one parent that is not a node becomes the root.",
          "valType": "data_array"
        },
        "values": {
          "editType": "calc",
          "role": "data",
          "description": "Value of each tile, a number ≥ 0 (rows with other values are dropped). How branches add up is `branchvalues`; without `values`, nodes are sized by `count`.",
          "valType": "data_array"
        },
        "branchvalues": {
          "values": ["remainder", "total"],
          "dflt": "remainder",
          "editType": "calc",
          "description": "How `values` of branches are read: `remainder` adds each node's value to its descendants' (a branch is bigger than its children), `total` takes it as the branch's total, which must not be less than its children's sum (the trace is not drawn otherwise).",
          "valType": "enumerated"
        },
        "count": {
          "flags": ["branches", "leaves"],
          "dflt": "leaves",
          "editType": "calc",
          "description": "Without `values`: what a node counts to size it — the leaves below it, its branches, or both.",
          "valType": "flaglist"
        },
        "level": {
          "editType": "plot",
          "description": "Id of the node shown as the root (the entry): `''` or unset for the whole hierarchy. Clicking a node sets it (drill-down); clicking the entry goes back up.",
          "valType": "any"
        },
        "maxdepth": {
          "dflt": -1,
          "editType": "plot",
          "description": "Levels drawn from the entry down, the entry included; -1 draws them all. Deeper nodes appear when drilling in.",
          "valType": "integer"
        },
        "tiling": {
          "editType": "calc",
          "description": "How tiles are laid out.",
          "role": "object",
          "packing": {
            "values": ["squarify", "binary", "dice", "slice", "slice-dice", "dice-slice"],
            "dflt": "squarify",
            "editType": "plot",
            "description": "How children share their parent's area (d3-hierarchy's tilings): `squarify` (tiles close to `squarifyratio`), `binary` (balanced splits), `dice` (side by side), `slice` (stacked), `slice-dice` / `dice-slice` (alternating by level).",
            "valType": "enumerated"
          },
          "squarifyratio": {
            "min": 1,
            "dflt": 1,
            "editType": "plot",
            "description": "With `squarify`: the aspect ratio tiles aim for, either way (2 gives tiles about 2:1 or 1:2). Plotly uses 1 (squares) where d3 uses the golden ratio.",
            "valType": "number"
          },
          "flip": {
            "flags": ["x", "y"],
            "dflt": "",
            "editType": "plot",
            "description": "Mirror the layout along x and / or y.",
            "valType": "flaglist"
          },
          "pad": {
            "min": 0,
            "dflt": 3,
            "editType": "plot",
            "description": "Gap between sibling tiles, px.",
            "valType": "number"
          }
        },
        "marker": {
          "editType": "calc",
          "description": "Tile style.",
          "role": "object",
          "colors": {
            "editType": "calc",
            "description": "Color of each tile: CSS colors, or numbers mapped through `colorscale`. Unset tiles take `layout.<type>colorway` colors on the first level and their parent's color below it.",
            "valType": "data_array"
          },
          "colorscale": {
            "editType": "calc",
            "description": "Colorscale for numeric `marker.colors` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "calc",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "calc",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "calc",
            "description": "Compute the color domain from the numeric `marker.colors` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "calc",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "calc",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "calc",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "calc",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "calc",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "line": {
            "editType": "calc",
            "description": "Tile outlines.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Outline color, or one per tile. Default: `paper_bgcolor`.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 1,
              "arrayOk": true,
              "editType": "style",
              "description": "Outline width in CSS px (centered on the edge), or one per tile.",
              "valType": "number"
            }
          },
          "pattern": {
            "editType": "style",
            "description": "Hatch pattern of the tile fill (drawn in screen px, for print and grayscale).",
            "role": "object",
            "shape": {
              "values": ["", "/", "\\", "x", "-", "|", "+", "."],
              "dflt": "",
              "arrayOk": true,
              "editType": "style",
              "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none, or one per tile.",
              "valType": "enumerated"
            },
            "fillmode": {
              "values": ["replace", "overlay"],
              "dflt": "replace",
              "editType": "style",
              "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
              "valType": "enumerated"
            },
            "bgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent, or one per tile.",
              "valType": "color"
            },
            "fgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`, or one per tile.",
              "valType": "color"
            },
            "fgopacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "arrayOk": true,
              "editType": "style",
              "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots, or one per tile.",
              "valType": "number"
            },
            "solidity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "arrayOk": true,
              "editType": "style",
              "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color, or one per tile.",
              "valType": "number"
            }
          },
          "pad": {
            "editType": "calc",
            "description": "Padding inside branch tiles around their children, px. Defaults to twice `textfont.size` on the header's side (the top, the bottom with `bottom` text positions) and half of `textfont.size` elsewhere.",
            "role": "object",
            "t": {
              "min": 0,
              "editType": "plot",
              "description": "Padding from the top, px.",
              "valType": "number"
            },
            "l": {
              "min": 0,
              "editType": "plot",
              "description": "Padding from the left, px.",
              "valType": "number"
            },
            "r": {
              "min": 0,
              "editType": "plot",
              "description": "Padding from the right, px.",
              "valType": "number"
            },
            "b": {
              "min": 0,
              "editType": "plot",
              "description": "Padding from the bottom, px.",
              "valType": "number"
            }
          },
          "depthfade": {
            "values": [true, false, "reversed"],
            "editType": "style",
            "description": "Fade tile colors towards the background from the leaves up to the headers (`reversed`: from the top down to the leaves). Not with a colorscale; default true unless `marker.colors` is set.",
            "valType": "enumerated"
          },
          "cornerradius": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Largest corner radius of tiles, px (limited by the padding on the label side).",
            "valType": "number"
          }
        },
        "pathbar": {
          "editType": "calc",
          "description": "The path bar: where the current root sits in the hierarchy.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Whether the path bar is drawn: the ancestors of the current root (`level`) as a bar outside the `domain`, one pixel away. Clicking a segment goes up to it.",
            "valType": "boolean"
          },
          "side": {
            "values": ["top", "bottom"],
            "dflt": "top",
            "editType": "plot",
            "description": "Side of the chart the path bar is on.",
            "valType": "enumerated"
          },
          "edgeshape": {
            "values": [">", "<", "|", "/", "\\"],
            "dflt": ">",
            "editType": "plot",
            "description": "Shape of the edges between path bar segments.",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 12,
            "editType": "plot",
            "description": "Thickness of the path bar in px. Default: `pathbar.textfont.size` plus 3 px on each side.",
            "valType": "number"
          },
          "textfont": {
            "editType": "plot",
            "description": "Font of path bar labels. Defaults to `textfont`, with a color contrasting the segment.",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "editType": "plot",
              "description": "CSS font-family list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "plot",
              "description": "Font size in CSS px, or one per node.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "plot",
              "description": "Text color, or one per node.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "plot",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "plot",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "root": {
          "editType": "calc",
          "description": "Root style.",
          "role": "object",
          "color": {
            "dflt": "rgba(0,0,0,0)",
            "editType": "calc",
            "description": "Color of the root node (transparent by default).",
            "valType": "color"
          }
        },
        "sort": {
          "dflt": true,
          "editType": "calc",
          "description": "Order siblings by value, largest first; otherwise in data order.",
          "valType": "boolean"
        },
        "text": {
          "editType": "plot",
          "description": "Text per tile, shown with the `text` flag of `textinfo`, and in hover labels unless `hovertext` is set.",
          "valType": "data_array"
        },
        "textinfo": {
          "flags": [
            "label",
            "text",
            "value",
            "current path",
            "percent root",
            "percent entry",
            "percent parent"
          ],
          "extras": ["none"],
          "editType": "plot",
          "description": "What node labels show, one per line in a fixed order: label, value, current path, the percentages (of the parent, the entry, the root; `'25% of parent'` when several), text. Default `'label'`, `'text+label'` when `text` is an array. Use `texttemplate` for other layouts.",
          "valType": "flaglist"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for node labels, overriding `textinfo`: `%{label}`, `%{value}`, `%{currentPath}`, `%{percentParent}`, `%{parent}`, `%{percentEntry}`, `%{entry}`, `%{percentRoot}`, `%{root}`, `%{text}`, `%{color}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{percentRoot:.1%}`).",
          "valType": "string"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of node labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextfont": {
          "editType": "plot",
          "description": "Font of labels inside nodes. Defaults to `textfont`, with a color contrasting the node.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "outsidetextfont": {
          "editType": "plot",
          "description": "Font of the root's label when the root is transparent (it sits on the background; not with a colorscale or several roots). Defaults to `textfont`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per node.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "plot",
            "description": "Text color, or one per node.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "textposition": {
          "values": [
            "top left",
            "top center",
            "top right",
            "middle left",
            "middle center",
            "middle right",
            "bottom left",
            "bottom center",
            "bottom right"
          ],
          "dflt": "top left",
          "editType": "plot",
          "description": "Where labels sit in their tiles. Branch labels (headers) sit in the top padding, or the bottom one for the `bottom` positions.",
          "valType": "enumerated"
        },
        "depth": {
          "dflt": 0,
          "editType": "plot",
          "description": "Extrusion toward the viewer (Holochart extension, 2.5D): CSS px, a percentage of each shape's width (`'60%'`), or one number per item. 0 (default) draws the trace flat. Seen in perspective with `layout.view3d`; in the flat view extruded shapes are lit from the front.",
          "valType": "any"
        },
        "bevel": {
          "editType": "plot",
          "description": "Rounded edges of extruded shapes (with `depth`).",
          "role": "object",
          "size": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Radius of the rounded front and side edges, CSS px (at most half the size).",
            "valType": "number"
          },
          "segments": {
            "min": 1,
            "max": 16,
            "dflt": 3,
            "editType": "plot",
            "description": "Segments of each rounded edge.",
            "valType": "integer"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of extruded shapes (with `depth`): Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        },
        "tilt": {
          "min": -80,
          "max": 80,
          "dflt": 0,
          "editType": "plot",
          "animatable": true,
          "description": "Tilt of the trace in 2.5D (Holochart extension), degrees: positive looks from above, 0 (default) is the flat view. With `depth`, slices and tiles show their sides.",
          "valType": "number"
        },
        "perspective": {
          "min": 0,
          "max": 1,
          "dflt": 0.5,
          "editType": "plot",
          "animatable": true,
          "description": "Strength of the perspective of a tilted or extruded trace: 0 is a parallel projection, 1 a strong one.",
          "valType": "number"
        }
      }
    },
    "barpolar": {
      "categories": ["polar", "bar", "showLegend"],
      "meta": {
        "description": "Bars in polar coordinates: annular sectors from a base to `r` at angles `theta`, stacked or overlaid (`polar.barmode`), e.g. wind roses; one instanced GPU draw call per trace.",
        "docsPage": "barpolar",
        "plotlyEquivalent": "barpolar"
      },
      "attributes": {
        "editType": "calc",
        "description": "Bars in polar coordinates: annular sectors from `base` to `base + r` at angle `theta`, stacked or overlaid per `polar.barmode` (wind roses).",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["r", "theta", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show (`r: …`, `θ: …`, the text and the trace name); `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "r": {
          "editType": "calc",
          "role": "data",
          "description": "Radial coordinates.",
          "valType": "data_array"
        },
        "theta": {
          "editType": "calc",
          "role": "data",
          "description": "Angular coordinates: numbers in `thetaunit` on a linear angular axis, category names on a category axis.",
          "valType": "data_array"
        },
        "r0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Alternative to `r`: the first radial coordinate, stepped by `dr`.",
          "valType": "any"
        },
        "dr": {
          "dflt": 1,
          "editType": "calc",
          "description": "Radial step of the implicit `r`.",
          "valType": "number"
        },
        "theta0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Alternative to `theta`: the first angular coordinate, stepped by `dtheta`.",
          "valType": "any"
        },
        "dtheta": {
          "editType": "calc",
          "description": "Angular step of the implicit `theta`. Defaults to the subplot period (a full turn, or the category count) divided by the number of points.",
          "valType": "number"
        },
        "thetaunit": {
          "values": ["radians", "degrees", "gradians"],
          "dflt": "degrees",
          "editType": "calc",
          "description": "Unit of `theta` (and `theta0`, `dtheta`) on linear angular axes.",
          "valType": "enumerated"
        },
        "subplot": {
          "dflt": "polar",
          "editType": "calc",
          "description": "The polar subplot this trace is drawn on: `'polar'` (`layout.polar`), `'polar2'` (`layout.polar2`), ….",
          "valType": "subplotid"
        },
        "base": {
          "arrayOk": true,
          "editType": "calc",
          "description": "Where bars start, in radial axis units (default 0). In `stack` barmode, traces that set `base` are not stacked: they are drawn from their base, as in `overlay` mode.",
          "valType": "any"
        },
        "offset": {
          "arrayOk": true,
          "editType": "calc",
          "description": "Angular shift of the leading edge of each bar from its `theta` (in `thetaunit`; category slots on category axes). Default: centered.",
          "valType": "number"
        },
        "width": {
          "min": 0,
          "arrayOk": true,
          "editType": "calc",
          "description": "Angular width of each bar (in `thetaunit`; category slots on category axes). Default: the smallest angle between bars, less `polar.bargap`.",
          "valType": "number"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text of each bar (one string for all, or one per bar).",
          "valType": "string"
        },
        "marker": {
          "editType": "calc",
          "description": "Bar style.",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Bar fill color, one per bar, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Bar opacity (multiplied by the trace `opacity`), or one per bar.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "Bar outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Bar outline color, one per bar, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Bar outline width in CSS px (centered on the edge), or one per bar.",
              "valType": "number"
            }
          },
          "pattern": {
            "editType": "style",
            "description": "Hatch pattern of the bar fill (drawn in screen px, for print and grayscale).",
            "role": "object",
            "shape": {
              "values": ["", "/", "\\", "x", "-", "|", "+", "."],
              "dflt": "",
              "arrayOk": true,
              "editType": "style",
              "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none, or one per bar.",
              "valType": "enumerated"
            },
            "fillmode": {
              "values": ["replace", "overlay"],
              "dflt": "replace",
              "editType": "style",
              "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
              "valType": "enumerated"
            },
            "bgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent, or one per bar.",
              "valType": "color"
            },
            "fgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`, or one per bar.",
              "valType": "color"
            },
            "fgopacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "arrayOk": true,
              "editType": "style",
              "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots, or one per bar.",
              "valType": "number"
            },
            "solidity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "arrayOk": true,
              "editType": "style",
              "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color, or one per bar.",
              "valType": "number"
            }
          }
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected bars while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of selected bars.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of selected bars.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of selected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of selected bars.",
              "valType": "color"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected bars while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of unselected bars.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of unselected bars. Default: 0.2 × the bar opacity.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of unselected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of unselected bars.",
              "valType": "color"
            }
          }
        }
      }
    },
    "contour": {
      "categories": ["cartesian", "2dMap", "contour", "showLegend"],
      "meta": {
        "description": "Contour plots: level lines of a grid of values, drawn as filled bands, a smooth heatmap or lines, with level labels along the lines, or constraint contours shading where the values satisfy an inequality.",
        "docsPage": "contour",
        "plotlyEquivalent": "contour"
      },
      "attributes": {
        "description": "Contour plot: level lines of a grid of values (uneven grids allowed), drawn as filled bands, a smooth heatmap or lines, with level labels along the lines, or constraint contours shading where the values satisfy an inequality.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "editType": "style",
          "description": "Hover text per grid point (2D like `z`); takes precedence over `text` in hover.",
          "valType": "data_array"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Values to contour: a 2D array (`z[row][column]`, rows along y), or a 1D array with `x` and `y` columns (one value per point, placed on the grid of their distinct x and y values). Non-numeric entries are gaps.",
          "valType": "data_array"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "X coordinates (numbers, dates or categories) of the grid points: one per column of `z` (extra values are ignored; missing ones continue the last step). Uneven spacing is fine. With 1D `z`, the x value of each point.",
          "valType": "data_array"
        },
        "x0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Coordinate of the first column when `x` is not given (or `xtype: 'scaled'`); the next ones step by `dx`.",
          "valType": "any"
        },
        "dx": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between columns when `x` is not given (milliseconds on date axes).",
          "valType": "number"
        },
        "xtype": {
          "values": ["array", "scaled"],
          "editType": "calc",
          "description": "`'array'` (default with `x`): place the grid points at `x`; `'scaled'` (default without): at `x0` + i × `dx`.",
          "valType": "enumerated"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Y coordinates (numbers, dates or categories) of the grid points: one per row of `z` (extra values are ignored; missing ones continue the last step). Uneven spacing is fine. With 1D `z`, the y value of each point.",
          "valType": "data_array"
        },
        "y0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Coordinate of the first row when `y` is not given (or `ytype: 'scaled'`); the next ones step by `dy`.",
          "valType": "any"
        },
        "dy": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between rows when `y` is not given (milliseconds on date axes).",
          "valType": "number"
        },
        "ytype": {
          "values": ["array", "scaled"],
          "editType": "calc",
          "description": "`'array'` (default with `y`): place the grid points at `y`; `'scaled'` (default without): at `y0` + i × `dy`.",
          "valType": "enumerated"
        },
        "xperiod": {
          "editType": "calc",
          "description": "Only on date or linear x axes: snap each x value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `xperiodalignment`.",
          "valType": "any"
        },
        "xperiod0": {
          "editType": "calc",
          "description": "A period boundary for `xperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "xperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `xperiod`.",
          "valType": "enumerated"
        },
        "yperiod": {
          "editType": "calc",
          "description": "Only on date or linear y axes: snap each y value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `yperiodalignment`.",
          "valType": "any"
        },
        "yperiod0": {
          "editType": "calc",
          "description": "A period boundary for `yperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "yperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `yperiod`.",
          "valType": "enumerated"
        },
        "transpose": {
          "dflt": false,
          "editType": "calc",
          "description": "Swap rows and columns of a 2D `z` (`z[column][row]`).",
          "valType": "boolean"
        },
        "text": {
          "editType": "calc",
          "description": "Text per grid point (2D like `z`, or 1D with column data): shown in hover labels and as `%{text}` in templates.",
          "valType": "data_array"
        },
        "hoverongaps": {
          "dflt": true,
          "editType": "none",
          "description": "Show hover labels on gaps (grid points without a value, with `connectgaps: false`), with an empty `z`.",
          "valType": "boolean"
        },
        "connectgaps": {
          "editType": "calc",
          "description": "Draw the contours across gaps (non-numeric `z`), which are always filled from their neighbours for contouring (Plotly’s Laplace fill). `false` clips the drawing to the data, leaving holes at the gaps. Default: true for 1D `z`, else false.",
          "valType": "boolean"
        },
        "texttemplate": {
          "dflt": "",
          "editType": "plot",
          "description": "Label drawn at every grid point with `contours.coloring: 'heatmap'`: `%{z}`, `%{x}`, `%{y}`, `%{text}`, with optional d3 formats (`%{z:.1f}`). Empty: no labels.",
          "valType": "string"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the cell labels (`texttemplate`).",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Font size in CSS px, or `'auto'`: the largest size (up to `layout.font.size`) at which labels fit their cells.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: black or white, whichever contrasts with the cell.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of x values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of y values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels (and `%{z}` in templates).",
          "valType": "string"
        },
        "autocontour": {
          "dflt": true,
          "editType": "calc",
          "description": "Pick the contour levels automatically (at most `ncontours`, at nice round values). Defaults to false when `contours.start` and `contours.end` are given.",
          "valType": "boolean"
        },
        "ncontours": {
          "min": 1,
          "dflt": 15,
          "editType": "calc",
          "description": "Maximum number of contour levels with `autocontour` (or without `contours.size`); the actual number is chosen to give nice round levels.",
          "valType": "integer"
        },
        "contours": {
          "editType": "calc",
          "description": "Contour levels, coloring, labels and constraints.",
          "role": "object",
          "type": {
            "values": ["levels", "constraint"],
            "dflt": "levels",
            "editType": "calc",
            "description": "`'levels'`: lines (and fills) at every level. `'constraint'`: the boundary of the region where `z` satisfies `operation` and `value`, with the region shaded in `fillcolor` for inequalities.",
            "valType": "enumerated"
          },
          "start": {
            "editType": "calc",
            "description": "First contour level (with `end`, turns `autocontour` off).",
            "valType": "number"
          },
          "end": {
            "editType": "calc",
            "description": "Last contour level (with `start`, turns `autocontour` off).",
            "valType": "number"
          },
          "size": {
            "min": 0,
            "editType": "calc",
            "description": "Step between contour levels. Default: a nice round step from `ncontours`.",
            "valType": "number"
          },
          "coloring": {
            "values": ["fill", "heatmap", "lines", "none"],
            "dflt": "fill",
            "editType": "calc",
            "description": "How levels are colored: flat bands between levels (`'fill'`), a smooth heatmap under the lines (`'heatmap'`), colored lines only (`'lines'`), or plain `line.color` lines (`'none'`). Not used by constraint contours.",
            "valType": "enumerated"
          },
          "showlines": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the contour lines (only for `coloring: 'fill'` and shaded constraints; always drawn otherwise).",
            "valType": "boolean"
          },
          "showlabels": {
            "dflt": false,
            "editType": "plot",
            "description": "Label contour lines with their level, along the lines (the lines break under the labels).",
            "valType": "boolean"
          },
          "labelfont": {
            "description": "Font of the level labels. Defaults to `layout.font`, colored like the lines.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "labelformat": {
            "dflt": "",
            "editType": "plot",
            "description": "d3 number format of the level labels, e.g. `.2f`. Default: automatic.",
            "valType": "string"
          },
          "operation": {
            "values": ["=", "<", ">=", ">", "<=", "[]", "()", "[)", "(]", "][", ")(", "](", ")["],
            "dflt": "=",
            "editType": "calc",
            "description": "Constraint contours: `'='` draws the line where `z` equals `value`; `'<'` / `'<='` and `'>'` / `'>='` shade where `z` is below or above `value`; `'[]'`, `'()'`, `'[)'`, `'(]'` shade inside the interval `value`, `'][', ')(', '](', ')['` outside it. Open and closed ends draw the same.",
            "valType": "enumerated"
          },
          "value": {
            "dflt": 0,
            "editType": "calc",
            "description": "Constraint contours: the boundary value, a number for comparisons, or `[lower, upper]` for intervals (a single number `v` means `[v, v + 1]`).",
            "valType": "any"
          }
        },
        "fillcolor": {
          "editType": "calc",
          "description": "Fill of the shaded region of constraint contours. Default: `line.color` (else the trace's colorway color) at half opacity.",
          "valType": "color"
        },
        "line": {
          "editType": "plot",
          "description": "Contour lines.",
          "role": "object",
          "color": {
            "editType": "style",
            "description": "Contour line color. Default: black; lines take their level's color with `coloring: 'lines'`. Constraint contours default to `fillcolor` made opaque.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 0.5,
            "editType": "style",
            "description": "Contour line width in px (default 0.5, or 2 for constraint contours).",
            "valType": "number"
          },
          "dash": {
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
            "valType": "string"
          },
          "smoothing": {
            "min": 0,
            "max": 1.3,
            "dflt": 1,
            "editType": "plot",
            "description": "Smoothing of the contour lines and fills (Plotly’s spline smoothing): 0 draws straight segments between grid crossings.",
            "valType": "number"
          }
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, contours draw above heatmaps and below bars and scatter traces (Plotly’s layer order).",
          "valType": "integer"
        },
        "zauto": {
          "dflt": true,
          "editType": "calc",
          "description": "Compute the color domain from the aggregated values. Defaults to false when both `zmin` and `zmax` are given.",
          "valType": "boolean"
        },
        "zmin": {
          "editType": "calc",
          "description": "Value mapped to the first colorscale color (with `zmax`; turns `zauto` off).",
          "valType": "number"
        },
        "zmax": {
          "editType": "calc",
          "description": "Value mapped to the last colorscale color (with `zmin`; turns `zauto` off).",
          "valType": "number"
        },
        "zmid": {
          "editType": "calc",
          "description": "With `zauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "colorscale": {
          "editType": "calc",
          "description": "Colorscale of the aggregated values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1. Default: Plotly's `RdBu`; the default `holochart` template uses its sequential neon plasma.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "dflt": false,
          "editType": "calc",
          "description": "Pick the colorscale from the sign of the color domain (`layout.colorscale.sequential`, `sequentialminus` or `diverging`) instead of `colorscale`.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "calc",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for the colorscale (drawn by the colorbar component).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "calc",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this trace's colorscale attributes.",
          "valType": "subplotid"
        }
      }
    },
    "heatmap": {
      "categories": ["cartesian", "2dMap", "showLegend"],
      "meta": {
        "description": "Heatmaps: a grid of values drawn as colored cells on the GPU (one float texture with a colorscale lookup), with optional cell labels.",
        "docsPage": "heatmap",
        "plotlyEquivalent": "heatmap"
      },
      "attributes": {
        "description": "Heatmap: a grid of values drawn as colored cells (one GPU texture with a colorscale lookup), with optional cell labels.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "editType": "style",
          "description": "Hover text per cell (2D like `z`); takes precedence over `text` in hover.",
          "valType": "data_array"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Cell values: a 2D array (`z[row][column]`, rows along y), or a 1D array with `x` and `y` columns (one value per point, placed on the grid of their distinct x and y values). Non-numeric entries are gaps.",
          "valType": "data_array"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "X coordinates (numbers, dates or categories): one per column of `z` (cell centers; the cell edges are halfway between them) or one more (the cell edges). With 1D `z`, the x value of each point.",
          "valType": "data_array"
        },
        "x0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Center of the first column when `x` is not given (or `xtype: 'scaled'`); the next ones step by `dx`.",
          "valType": "any"
        },
        "dx": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between columns when `x` is not given (milliseconds on date axes).",
          "valType": "number"
        },
        "xtype": {
          "values": ["array", "scaled"],
          "editType": "calc",
          "description": "`'array'` (default with `x`): place the cells at `x`; `'scaled'` (default without): at `x0` + i × `dx`.",
          "valType": "enumerated"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Y coordinates (numbers, dates or categories): one per row of `z` (cell centers; the cell edges are halfway between them) or one more (the cell edges). With 1D `z`, the y value of each point.",
          "valType": "data_array"
        },
        "y0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Center of the first row when `y` is not given (or `ytype: 'scaled'`); the next ones step by `dy`.",
          "valType": "any"
        },
        "dy": {
          "dflt": 1,
          "editType": "calc",
          "description": "Step between rows when `y` is not given (milliseconds on date axes).",
          "valType": "number"
        },
        "ytype": {
          "values": ["array", "scaled"],
          "editType": "calc",
          "description": "`'array'` (default with `y`): place the cells at `y`; `'scaled'` (default without): at `y0` + i × `dy`.",
          "valType": "enumerated"
        },
        "xperiod": {
          "editType": "calc",
          "description": "Only on date or linear x axes: snap each x value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `xperiodalignment`.",
          "valType": "any"
        },
        "xperiod0": {
          "editType": "calc",
          "description": "A period boundary for `xperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "xperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `xperiod`.",
          "valType": "enumerated"
        },
        "yperiod": {
          "editType": "calc",
          "description": "Only on date or linear y axes: snap each y value to its period of this length (ms, or `'M<n>'` months on date axes), positioned per `yperiodalignment`.",
          "valType": "any"
        },
        "yperiod0": {
          "editType": "calc",
          "description": "A period boundary for `yperiod`. Default: 2000-01-01 on date axes (a Sunday for weekly periods), 0 otherwise.",
          "valType": "any"
        },
        "yperiodalignment": {
          "values": ["start", "middle", "end"],
          "dflt": "middle",
          "editType": "calc",
          "description": "Where points sit within their `yperiod`.",
          "valType": "enumerated"
        },
        "transpose": {
          "dflt": false,
          "editType": "calc",
          "description": "Swap rows and columns of a 2D `z` (`z[column][row]`).",
          "valType": "boolean"
        },
        "text": {
          "editType": "calc",
          "description": "Text per cell (2D like `z`, or 1D with column data): shown in hover labels and as `%{text}` in templates.",
          "valType": "data_array"
        },
        "hoverongaps": {
          "dflt": true,
          "editType": "none",
          "description": "Show hover labels on gaps (cells without a value), with an empty `z`.",
          "valType": "boolean"
        },
        "connectgaps": {
          "editType": "calc",
          "description": "Fill gaps by interpolating their neighbours (Plotly’s Laplace fill). Default: true for 1D `z` with `zsmooth`, else false.",
          "valType": "boolean"
        },
        "xgap": {
          "min": 0,
          "dflt": 0,
          "editType": "style",
          "description": "Horizontal gap between cells, in px (only without `zsmooth`).",
          "valType": "number"
        },
        "ygap": {
          "min": 0,
          "dflt": 0,
          "editType": "style",
          "description": "Vertical gap between cells, in px (only without `zsmooth`).",
          "valType": "number"
        },
        "zsmooth": {
          "values": ["fast", "best", false],
          "dflt": false,
          "editType": "style",
          "description": "Cell smoothing: none (`false`, flat cells), `'fast'` (bilinear between cell centers by cell index; off on log axes and uneven grids, as in Plotly) or `'best'` (bilinear between cell centers in data space). Drawn on the GPU either way.",
          "valType": "enumerated"
        },
        "texttemplate": {
          "dflt": "",
          "editType": "plot",
          "description": "Label drawn in every cell: `%{z}`, `%{x}`, `%{y}` (cell centers), `%{text}`, with optional d3 formats (`%{z:.1f}`). Empty: no labels.",
          "valType": "string"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the cell labels (`texttemplate`).",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Font size in CSS px, or `'auto'`: the largest size (up to `layout.font.size`) at which labels fit their cells.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: black or white, whichever contrasts with the cell.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of x values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of y values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels (and `%{z}` in templates).",
          "valType": "string"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, heatmaps draw below contours, bars and scatter traces (Plotly’s layer order).",
          "valType": "integer"
        },
        "zauto": {
          "dflt": true,
          "editType": "style",
          "description": "Compute the color domain from the aggregated values. Defaults to false when both `zmin` and `zmax` are given.",
          "valType": "boolean"
        },
        "zmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `zmax`; turns `zauto` off).",
          "valType": "number"
        },
        "zmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `zmin`; turns `zauto` off).",
          "valType": "number"
        },
        "zmid": {
          "editType": "style",
          "description": "With `zauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale of the aggregated values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1. Default: Plotly's `RdBu`; the default `holochart` template uses its sequential neon plasma.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "dflt": false,
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (`layout.colorscale.sequential`, `sequentialminus` or `diverging`) instead of `colorscale`.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for the colorscale (drawn by the colorbar component).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this trace's colorscale attributes.",
          "valType": "subplotid"
        },
        "depth": {
          "dflt": 0,
          "editType": "plot",
          "description": "Cells as columns (Holochart extension, 2.5D): the height in CSS px of a column at `zmax` (or a percentage of the mean cell width, `'300%'`); heights grow linearly from 0 (from `zmin` with negative values), colored like the cells. 0 (default) draws the heatmap flat.",
          "valType": "any"
        },
        "bevel": {
          "editType": "plot",
          "description": "Rounded edges of extruded shapes (with `depth`).",
          "role": "object",
          "size": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Radius of the rounded front and side edges, CSS px (at most half the size).",
            "valType": "number"
          },
          "segments": {
            "min": 1,
            "max": 16,
            "dflt": 3,
            "editType": "plot",
            "description": "Segments of each rounded edge.",
            "valType": "integer"
          }
        },
        "material": {
          "editType": "calc",
          "description": "The material of extruded shapes (with `depth`): Plotly figures keep the default, `plotly`.",
          "role": "object",
          "type": {
            "values": [
              "plotly",
              "flat",
              "basic",
              "lambert",
              "phong",
              "standard",
              "physical",
              "toon",
              "matcap"
            ],
            "dflt": "plotly",
            "editType": "calc",
            "description": "How surfaces are shaded. `plotly`: Plotly's lighting model. `flat`: unlit, colors as given. `basic`, `lambert`, `phong`, `standard`, `physical`, `toon`, `matcap`: the three.js material of that name, lit by the lights of the scene (`scene.lighting`) or of the 2.5D view.",
            "valType": "enumerated"
          },
          "roughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Surface roughness (`standard`, `physical`). Default: `lighting.roughness`.",
            "valType": "number"
          },
          "metalness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How metallic the surface is (`standard`, `physical`). Default 0.",
            "valType": "number"
          },
          "shininess": {
            "min": 0,
            "editType": "calc",
            "description": "Sharpness of the highlights (`phong`). Default: from `lighting.roughness`.",
            "valType": "number"
          },
          "specular": {
            "editType": "calc",
            "description": "Color of the highlights (`phong`). Default: `lighting.specular` gray.",
            "valType": "color"
          },
          "emissive": {
            "editType": "calc",
            "description": "Color the surface emits regardless of the lights. Default black.",
            "valType": "color"
          },
          "emissiveintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of `emissive`. Default 1.",
            "valType": "number"
          },
          "reflectivity": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "How much the environment is reflected (`basic`, `lambert`, `phong`, `physical`).",
            "valType": "number"
          },
          "envmapintensity": {
            "min": 0,
            "editType": "calc",
            "description": "Strength of the environment's light (`standard`, `physical`). Default 1.",
            "valType": "number"
          },
          "clearcoat": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "A clear lacquer layer (`physical`). Default 0.",
            "valType": "number"
          },
          "clearcoatroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the clear coat (`physical`). Default 0.",
            "valType": "number"
          },
          "transmission": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Transmission, for glass-like surfaces (`physical`). Default 0.",
            "valType": "number"
          },
          "ior": {
            "min": 1,
            "max": 2.333,
            "editType": "calc",
            "description": "Index of refraction (`physical`). Default 1.5.",
            "valType": "number"
          },
          "thickness": {
            "min": 0,
            "editType": "calc",
            "description": "Thickness of transmissive volumes, scene units (`physical`).",
            "valType": "number"
          },
          "sheen": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Velvet-like sheen (`physical`). Default 0.",
            "valType": "number"
          },
          "sheencolor": {
            "editType": "calc",
            "description": "Color of the sheen (`physical`).",
            "valType": "color"
          },
          "sheenroughness": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Roughness of the sheen (`physical`). Default 1.",
            "valType": "number"
          },
          "iridescence": {
            "min": 0,
            "max": 1,
            "editType": "calc",
            "description": "Thin-film iridescence (`physical`). Default 0.",
            "valType": "number"
          },
          "steps": {
            "min": 2,
            "max": 16,
            "dflt": 3,
            "editType": "calc",
            "description": "Number of shading bands (`toon`).",
            "valType": "integer"
          },
          "matcap": {
            "editType": "calc",
            "description": "URL of a matcap image (`matcap`): the surface takes its colors from it by normal direction.",
            "valType": "string"
          },
          "castshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Cast shadows from the lights of `scene.lighting` with `castshadow` (onto three.js material types and the ground plane).",
            "valType": "boolean"
          },
          "receiveshadow": {
            "dflt": false,
            "editType": "calc",
            "description": "Receive shadows (three.js material types only).",
            "valType": "boolean"
          }
        }
      }
    },
    "image": {
      "categories": ["cartesian", "2dMap", "noSortingByValue"],
      "meta": {
        "description": "Images: pixel colors (RGB, RGBA or HSL components, or an encoded picture) drawn as one texture on the axes, with pixel hover.",
        "docsPage": "image",
        "plotlyEquivalent": "image"
      },
      "attributes": {
        "description": "Image: pixel colors (RGB, RGBA or HSL components, or an encoded picture) drawn as one texture on the axes, with pixel hover.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "editType": "plot",
          "description": "Hover text per pixel (2D like `z`); takes precedence over `text`.",
          "valType": "data_array"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "color", "name", "text"],
          "extras": ["all", "none", "skip"],
          "dflt": "x+y+z+text+name",
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show: `z` is the pixel's components as given, `color` the color they make in the color model (`RGB: [r, g, b]`).",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels: `%{x}`, `%{y}`, `%{z}` (the pixel, `%{z[0]}` … its components), `%{color}` (scaled color, `%{color[0]}` …), `%{colormodel}`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "source": {
          "editType": "calc",
          "description": "The picture as a base64 data URI (`'data:image/png;base64,…'`; PNG, JPEG, GIF, WebP or BMP), used when `z` is not given. Other URLs are ignored, as in Plotly.",
          "valType": "string"
        },
        "z": {
          "editType": "calc",
          "role": "data",
          "description": "Pixel colors: `z[row][column]` is an array of color components in `colormodel` (e.g. `[r, g, b]`). Row 0 is drawn at `y0`, at the top by default.",
          "valType": "data_array"
        },
        "colormodel": {
          "values": ["rgb", "rgba", "rgba256", "hsl", "hsla"],
          "editType": "calc",
          "description": "How `z` components are read: `'rgb'` (default), `'rgba'` (alpha 0–1), `'rgba256'` (alpha 0–255; always used for `source`), `'hsl'` or `'hsla'`.",
          "valType": "enumerated"
        },
        "zmin": {
          "items": [
            {
              "editType": "calc",
              "description": "First component.",
              "valType": "number"
            },
            {
              "editType": "calc",
              "description": "Second component.",
              "valType": "number"
            },
            {
              "editType": "calc",
              "description": "Third component.",
              "valType": "number"
            },
            {
              "editType": "calc",
              "description": "Fourth component (alpha).",
              "valType": "number"
            }
          ],
          "freeLength": true,
          "editType": "calc",
          "description": "Per component, the `z` value mapped to the first value of the color model's range (0–255 for r, g, b; 0–1 for alpha, or 0–255 with `rgba256`; 0–360 for hue; 0–100 for saturation and lightness). Default: that range, so values are used as they are.",
          "valType": "info_array"
        },
        "zmax": {
          "items": [
            {
              "editType": "calc",
              "description": "First component.",
              "valType": "number"
            },
            {
              "editType": "calc",
              "description": "Second component.",
              "valType": "number"
            },
            {
              "editType": "calc",
              "description": "Third component.",
              "valType": "number"
            },
            {
              "editType": "calc",
              "description": "Fourth component (alpha).",
              "valType": "number"
            }
          ],
          "freeLength": true,
          "editType": "calc",
          "description": "Per component, the `z` value mapped to the last value of the color model's range (0–255 for r, g, b; 0–1 for alpha, or 0–255 with `rgba256`; 0–360 for hue; 0–100 for saturation and lightness). Default: that range, so values are used as they are.",
          "valType": "info_array"
        },
        "zsmooth": {
          "values": ["fast", false],
          "dflt": false,
          "editType": "style",
          "description": "Pixel smoothing: none (`false`, square pixels) or `'fast'` (bilinear, the GPU's linear filtering).",
          "valType": "enumerated"
        },
        "x0": {
          "dflt": 0,
          "editType": "calc",
          "description": "X coordinate of the center of the first pixel column.",
          "valType": "any"
        },
        "y0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Y coordinate of the center of the first pixel row.",
          "valType": "any"
        },
        "dx": {
          "dflt": 1,
          "editType": "calc",
          "description": "Pixel width in x units.",
          "valType": "number"
        },
        "dy": {
          "dflt": 1,
          "editType": "calc",
          "description": "Pixel height in y units.",
          "valType": "number"
        },
        "text": {
          "editType": "plot",
          "description": "Text per pixel (2D like `z`), shown in hover labels.",
          "valType": "data_array"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, images draw below every other trace type (Plotly’s layer order).",
          "valType": "integer"
        }
      }
    },
    "scatterpolar": {
      "categories": ["polar", "symbols", "showLegend", "scatter-like"],
      "meta": {
        "description": "Markers, lines (straight or spline), text and filled areas at polar coordinates on a polar subplot: polar scatter plots, spirals and radar charts (`fill: toself`).",
        "docsPage": "polar",
        "plotlyEquivalent": "scatterpolar / scatterpolargl"
      },
      "attributes": {
        "editType": "calc",
        "description": "Markers, lines, text and filled areas (radar charts) at polar coordinates `r`, `theta` on a polar subplot (`layout.polar`).",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["r", "theta", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show (`r: …`, `θ: …`, the text and the trace name); `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "r": {
          "editType": "calc",
          "role": "data",
          "description": "Radial coordinates.",
          "valType": "data_array"
        },
        "theta": {
          "editType": "calc",
          "role": "data",
          "description": "Angular coordinates: numbers in `thetaunit` on a linear angular axis, category names on a category axis.",
          "valType": "data_array"
        },
        "r0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Alternative to `r`: the first radial coordinate, stepped by `dr`.",
          "valType": "any"
        },
        "dr": {
          "dflt": 1,
          "editType": "calc",
          "description": "Radial step of the implicit `r`.",
          "valType": "number"
        },
        "theta0": {
          "dflt": 0,
          "editType": "calc",
          "description": "Alternative to `theta`: the first angular coordinate, stepped by `dtheta`.",
          "valType": "any"
        },
        "dtheta": {
          "editType": "calc",
          "description": "Angular step of the implicit `theta`. Defaults to the subplot period (a full turn, or the category count) divided by the number of points.",
          "valType": "number"
        },
        "thetaunit": {
          "values": ["radians", "degrees", "gradians"],
          "dflt": "degrees",
          "editType": "calc",
          "description": "Unit of `theta` (and `theta0`, `dtheta`) on linear angular axes.",
          "valType": "enumerated"
        },
        "subplot": {
          "dflt": "polar",
          "editType": "calc",
          "description": "The polar subplot this trace is drawn on: `'polar'` (`layout.polar`), `'polar2'` (`layout.polar2`), ….",
          "valType": "subplotid"
        },
        "mode": {
          "flags": ["lines", "markers", "text"],
          "extras": ["none"],
          "editType": "calc",
          "description": "Drawing mode. Defaults to `'lines+markers'` below 20 points, else `'lines'` (Plotly rule).",
          "valType": "flaglist"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Text per point: the labels of `mode` `text`, and hover text.",
          "valType": "string"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "plot",
          "description": "Template for the text labels, e.g. `'%{y:.2f}'` or `'%{x|%b %d}'` (d3-format / d3-time-format after `:` / `|`). Keys: `x`, `y`, `text`, `customdata`, `marker.size`, `marker.color`, `meta`. Overrides `text`.",
          "valType": "string"
        },
        "textposition": {
          "values": [
            "top left",
            "top center",
            "top right",
            "middle left",
            "middle center",
            "middle right",
            "bottom left",
            "bottom center",
            "bottom right"
          ],
          "dflt": "middle center",
          "arrayOk": true,
          "editType": "plot",
          "description": "Where text labels sit relative to their point (and marker), or one per point.",
          "valType": "enumerated"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the text labels (`mode` `text`). Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "arrayOk": true,
            "editType": "plot",
            "description": "CSS font family of the text labels, or one per point.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "plot",
            "description": "Font size in CSS px, or one per point.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per point.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight, `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "line": {
          "editType": "plot",
          "description": "Line style (`mode` `lines`). `shape` and `smoothing` also shape fills.",
          "role": "object",
          "color": {
            "editType": "style",
            "description": "Line color. Defaults to the marker color (when a single color) or the colorway.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Line width in CSS px.",
            "valType": "number"
          },
          "dash": {
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
            "valType": "string"
          },
          "shape": {
            "values": ["linear", "spline"],
            "dflt": "linear",
            "editType": "plot",
            "description": "Interpolation between points: straight segments, or `'spline'` (centripetal Catmull-Rom, see `smoothing`), drawn in screen space as Plotly does.",
            "valType": "enumerated"
          },
          "smoothing": {
            "min": 0,
            "max": 1.3,
            "dflt": 1,
            "editType": "plot+crossTraceCalc",
            "description": "Spline tension for `shape: 'spline'`: 0 is straight, 1.3 the smoothest.",
            "valType": "number"
          }
        },
        "connectgaps": {
          "dflt": false,
          "editType": "plot+crossTraceCalc",
          "description": "Connect lines across missing (`null`, `NaN`) points instead of breaking them.",
          "valType": "boolean"
        },
        "marker": {
          "editType": "calc",
          "description": "Marker style (`mode` `markers`).",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker fill color, one CSS color per point, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "size": {
            "min": 0,
            "dflt": 6,
            "arrayOk": true,
            "editType": "calc",
            "animatable": true,
            "description": "Marker diameter in CSS px, or one value per point (scaled by `sizeref`/`sizemode`).",
            "valType": "number"
          },
          "sizemode": {
            "values": ["diameter", "area"],
            "dflt": "diameter",
            "editType": "calc",
            "description": "How per-point `size` values become px: proportional to the diameter or to the area (bubble charts).",
            "valType": "enumerated"
          },
          "sizeref": {
            "dflt": 1,
            "editType": "calc",
            "description": "Divides per-point `size` values (bubble charts; see `sizemode`).",
            "valType": "number"
          },
          "sizemin": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Minimum radius (px) of markers with per-point `size` values.",
            "valType": "number"
          },
          "symbol": {
            "values": [
              "circle",
              0,
              "0",
              "circle-open",
              100,
              "100",
              "circle-dot",
              200,
              "200",
              "circle-open-dot",
              300,
              "300",
              "square",
              1,
              "1",
              "square-open",
              101,
              "101",
              "square-dot",
              201,
              "201",
              "square-open-dot",
              301,
              "301",
              "diamond",
              2,
              "2",
              "diamond-open",
              102,
              "102",
              "diamond-dot",
              202,
              "202",
              "diamond-open-dot",
              302,
              "302",
              "cross",
              3,
              "3",
              "cross-open",
              103,
              "103",
              "cross-dot",
              203,
              "203",
              "cross-open-dot",
              303,
              "303",
              "x",
              4,
              "4",
              "x-open",
              104,
              "104",
              "x-dot",
              204,
              "204",
              "x-open-dot",
              304,
              "304",
              "triangle-up",
              5,
              "5",
              "triangle-up-open",
              105,
              "105",
              "triangle-up-dot",
              205,
              "205",
              "triangle-up-open-dot",
              305,
              "305",
              "triangle-down",
              6,
              "6",
              "triangle-down-open",
              106,
              "106",
              "triangle-down-dot",
              206,
              "206",
              "triangle-down-open-dot",
              306,
              "306",
              "triangle-left",
              7,
              "7",
              "triangle-left-open",
              107,
              "107",
              "triangle-left-dot",
              207,
              "207",
              "triangle-left-open-dot",
              307,
              "307",
              "triangle-right",
              8,
              "8",
              "triangle-right-open",
              108,
              "108",
              "triangle-right-dot",
              208,
              "208",
              "triangle-right-open-dot",
              308,
              "308",
              "triangle-ne",
              9,
              "9",
              "triangle-ne-open",
              109,
              "109",
              "triangle-ne-dot",
              209,
              "209",
              "triangle-ne-open-dot",
              309,
              "309",
              "triangle-se",
              10,
              "10",
              "triangle-se-open",
              110,
              "110",
              "triangle-se-dot",
              210,
              "210",
              "triangle-se-open-dot",
              310,
              "310",
              "triangle-sw",
              11,
              "11",
              "triangle-sw-open",
              111,
              "111",
              "triangle-sw-dot",
              211,
              "211",
              "triangle-sw-open-dot",
              311,
              "311",
              "triangle-nw",
              12,
              "12",
              "triangle-nw-open",
              112,
              "112",
              "triangle-nw-dot",
              212,
              "212",
              "triangle-nw-open-dot",
              312,
              "312",
              "pentagon",
              13,
              "13",
              "pentagon-open",
              113,
              "113",
              "pentagon-dot",
              213,
              "213",
              "pentagon-open-dot",
              313,
              "313",
              "hexagon",
              14,
              "14",
              "hexagon-open",
              114,
              "114",
              "hexagon-dot",
              214,
              "214",
              "hexagon-open-dot",
              314,
              "314",
              "hexagon2",
              15,
              "15",
              "hexagon2-open",
              115,
              "115",
              "hexagon2-dot",
              215,
              "215",
              "hexagon2-open-dot",
              315,
              "315",
              "octagon",
              16,
              "16",
              "octagon-open",
              116,
              "116",
              "octagon-dot",
              216,
              "216",
              "octagon-open-dot",
              316,
              "316",
              "star",
              17,
              "17",
              "star-open",
              117,
              "117",
              "star-dot",
              217,
              "217",
              "star-open-dot",
              317,
              "317",
              "hexagram",
              18,
              "18",
              "hexagram-open",
              118,
              "118",
              "hexagram-dot",
              218,
              "218",
              "hexagram-open-dot",
              318,
              "318",
              "star-triangle-up",
              19,
              "19",
              "star-triangle-up-open",
              119,
              "119",
              "star-triangle-up-dot",
              219,
              "219",
              "star-triangle-up-open-dot",
              319,
              "319",
              "star-triangle-down",
              20,
              "20",
              "star-triangle-down-open",
              120,
              "120",
              "star-triangle-down-dot",
              220,
              "220",
              "star-triangle-down-open-dot",
              320,
              "320",
              "star-square",
              21,
              "21",
              "star-square-open",
              121,
              "121",
              "star-square-dot",
              221,
              "221",
              "star-square-open-dot",
              321,
              "321",
              "star-diamond",
              22,
              "22",
              "star-diamond-open",
              122,
              "122",
              "star-diamond-dot",
              222,
              "222",
              "star-diamond-open-dot",
              322,
              "322",
              "diamond-tall",
              23,
              "23",
              "diamond-tall-open",
              123,
              "123",
              "diamond-tall-dot",
              223,
              "223",
              "diamond-tall-open-dot",
              323,
              "323",
              "diamond-wide",
              24,
              "24",
              "diamond-wide-open",
              124,
              "124",
              "diamond-wide-dot",
              224,
              "224",
              "diamond-wide-open-dot",
              324,
              "324",
              "hourglass",
              25,
              "25",
              "hourglass-open",
              125,
              "125",
              "hourglass-dot",
              225,
              "225",
              "hourglass-open-dot",
              325,
              "325",
              "bowtie",
              26,
              "26",
              "bowtie-open",
              126,
              "126",
              "bowtie-dot",
              226,
              "226",
              "bowtie-open-dot",
              326,
              "326",
              "circle-cross",
              27,
              "27",
              "circle-cross-open",
              127,
              "127",
              "circle-cross-dot",
              227,
              "227",
              "circle-cross-open-dot",
              327,
              "327",
              "circle-x",
              28,
              "28",
              "circle-x-open",
              128,
              "128",
              "circle-x-dot",
              228,
              "228",
              "circle-x-open-dot",
              328,
              "328",
              "square-cross",
              29,
              "29",
              "square-cross-open",
              129,
              "129",
              "square-cross-dot",
              229,
              "229",
              "square-cross-open-dot",
              329,
              "329",
              "square-x",
              30,
              "30",
              "square-x-open",
              130,
              "130",
              "square-x-dot",
              230,
              "230",
              "square-x-open-dot",
              330,
              "330",
              "diamond-cross",
              31,
              "31",
              "diamond-cross-open",
              131,
              "131",
              "diamond-cross-dot",
              231,
              "231",
              "diamond-cross-open-dot",
              331,
              "331",
              "diamond-x",
              32,
              "32",
              "diamond-x-open",
              132,
              "132",
              "diamond-x-dot",
              232,
              "232",
              "diamond-x-open-dot",
              332,
              "332",
              "cross-thin",
              33,
              "33",
              "cross-thin-open",
              133,
              "133",
              "cross-thin-dot",
              233,
              "233",
              "cross-thin-open-dot",
              333,
              "333",
              "x-thin",
              34,
              "34",
              "x-thin-open",
              134,
              "134",
              "x-thin-dot",
              234,
              "234",
              "x-thin-open-dot",
              334,
              "334",
              "asterisk",
              35,
              "35",
              "asterisk-open",
              135,
              "135",
              "asterisk-dot",
              235,
              "235",
              "asterisk-open-dot",
              335,
              "335",
              "hash",
              36,
              "36",
              "hash-open",
              136,
              "136",
              "hash-dot",
              236,
              "236",
              "hash-open-dot",
              336,
              "336",
              "y-up",
              37,
              "37",
              "y-up-open",
              137,
              "137",
              "y-up-dot",
              237,
              "237",
              "y-up-open-dot",
              337,
              "337",
              "y-down",
              38,
              "38",
              "y-down-open",
              138,
              "138",
              "y-down-dot",
              238,
              "238",
              "y-down-open-dot",
              338,
              "338",
              "y-left",
              39,
              "39",
              "y-left-open",
              139,
              "139",
              "y-left-dot",
              239,
              "239",
              "y-left-open-dot",
              339,
              "339",
              "y-right",
              40,
              "40",
              "y-right-open",
              140,
              "140",
              "y-right-dot",
              240,
              "240",
              "y-right-open-dot",
              340,
              "340",
              "line-ew",
              41,
              "41",
              "line-ew-open",
              141,
              "141",
              "line-ew-dot",
              241,
              "241",
              "line-ew-open-dot",
              341,
              "341",
              "line-ns",
              42,
              "42",
              "line-ns-open",
              142,
              "142",
              "line-ns-dot",
              242,
              "242",
              "line-ns-open-dot",
              342,
              "342",
              "line-ne",
              43,
              "43",
              "line-ne-open",
              143,
              "143",
              "line-ne-dot",
              243,
              "243",
              "line-ne-open-dot",
              343,
              "343",
              "line-nw",
              44,
              "44",
              "line-nw-open",
              144,
              "144",
              "line-nw-dot",
              244,
              "244",
              "line-nw-open-dot",
              344,
              "344",
              "arrow-up",
              45,
              "45",
              "arrow-up-open",
              145,
              "145",
              "arrow-up-dot",
              245,
              "245",
              "arrow-up-open-dot",
              345,
              "345",
              "arrow-down",
              46,
              "46",
              "arrow-down-open",
              146,
              "146",
              "arrow-down-dot",
              246,
              "246",
              "arrow-down-open-dot",
              346,
              "346",
              "arrow-left",
              47,
              "47",
              "arrow-left-open",
              147,
              "147",
              "arrow-left-dot",
              247,
              "247",
              "arrow-left-open-dot",
              347,
              "347",
              "arrow-right",
              48,
              "48",
              "arrow-right-open",
              148,
              "148",
              "arrow-right-dot",
              248,
              "248",
              "arrow-right-open-dot",
              348,
              "348",
              "arrow-bar-up",
              49,
              "49",
              "arrow-bar-up-open",
              149,
              "149",
              "arrow-bar-up-dot",
              249,
              "249",
              "arrow-bar-up-open-dot",
              349,
              "349",
              "arrow-bar-down",
              50,
              "50",
              "arrow-bar-down-open",
              150,
              "150",
              "arrow-bar-down-dot",
              250,
              "250",
              "arrow-bar-down-open-dot",
              350,
              "350",
              "arrow-bar-left",
              51,
              "51",
              "arrow-bar-left-open",
              151,
              "151",
              "arrow-bar-left-dot",
              251,
              "251",
              "arrow-bar-left-open-dot",
              351,
              "351",
              "arrow-bar-right",
              52,
              "52",
              "arrow-bar-right-open",
              152,
              "152",
              "arrow-bar-right-dot",
              252,
              "252",
              "arrow-bar-right-open-dot",
              352,
              "352",
              "arrow",
              53,
              "53",
              "arrow-open",
              153,
              "153",
              "arrow-dot",
              253,
              "253",
              "arrow-open-dot",
              353,
              "353",
              "arrow-wide",
              54,
              "54",
              "arrow-wide-open",
              154,
              "154",
              "arrow-wide-dot",
              254,
              "254",
              "arrow-wide-open-dot",
              354,
              "354"
            ],
            "dflt": "circle",
            "arrayOk": true,
            "editType": "style",
            "description": "Marker symbol: a name (`'diamond-open'`), a Plotly numeric code, a custom symbol registered with `symbols.register` (with the same `-open` / `-dot` variants), a `'text:…'` glyph such as `'text:🚀'`, or one per point.",
            "valType": "enumerated"
          },
          "image": {
            "strict": true,
            "arrayOk": true,
            "editType": "style",
            "description": "Image sprites: a URL or data URI drawn instead of the symbol in a `size` × `size` square (keeping its aspect ratio), or one per point (empty entries keep the symbol). `opacity` applies; `color` and `line` do not. Cross-origin URLs need CORS headers.",
            "valType": "string"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker opacity (multiplied by the trace `opacity`), or one per point. Default 1, 0.7 for bubbles.",
            "valType": "number"
          },
          "angle": {
            "dflt": 0,
            "arrayOk": true,
            "editType": "style",
            "description": "Marker rotation in degrees, clockwise, or one per point.",
            "valType": "angle"
          },
          "maxdisplayed": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Draw at most this many markers (evenly strided over the data); 0 draws all.",
            "valType": "number"
          },
          "line": {
            "editType": "style",
            "description": "Marker outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline color, one per point, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline width in CSS px, or one per point. Default 0, 1 for bubbles.",
              "valType": "number"
            }
          }
        },
        "cliponaxis": {
          "dflt": false,
          "editType": "plot",
          "description": "Clip markers and text to the subplot outline. Lines and fills are always clipped; unclipped markers outside the radial range or sector are hidden, as in Plotly.",
          "valType": "boolean"
        },
        "fill": {
          "values": ["none", "toself", "tonext"],
          "dflt": "none",
          "editType": "plot",
          "description": "`toself` closes the line (each run between gaps) into a filled shape (radar charts); `tonext` fills the ring between this trace and the previous scatterpolar trace on the subplot (one should enclose the other), and acts like `toself` for the first trace.",
          "valType": "enumerated"
        },
        "fillcolor": {
          "editType": "style",
          "description": "Fill color. Default: the line color (else the marker color, else the colorway color) at half opacity.",
          "valType": "color"
        },
        "hoveron": {
          "flags": ["points", "fills"],
          "editType": "style",
          "description": "What hover reacts to: points (markers, line vertices) and/or the filled area, which reports the trace. Default `'fills'` for `'toself'` / `'tonext'` fills without markers or text, else `'points'`. Fills hover (in every hovermode) only when no point is under the pointer.",
          "valType": "flaglist"
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected points while a selection is active (box/lasso select, `selectedpoints`).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected points.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Marker opacity of selected points.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Marker color of selected points.",
              "valType": "color"
            },
            "size": {
              "min": 0,
              "editType": "style",
              "description": "Marker size (px) of selected points.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of selected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of selected points.",
              "valType": "color"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected points while a selection is active (box/lasso select, `selectedpoints`).",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected points.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Marker opacity of unselected points. Default: 0.2 × the marker opacity when no selected/unselected opacity is set.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Marker color of unselected points.",
              "valType": "color"
            },
            "size": {
              "min": 0,
              "editType": "style",
              "description": "Marker size (px) of unselected points.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of unselected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of unselected points.",
              "valType": "color"
            }
          }
        }
      }
    },
    "box": {
      "categories": ["cartesian", "showLegend", "box-violin", "boxLayout"],
      "meta": {
        "description": "Box plots: the quartiles, median, whiskers (fences at 1.5 IQR) and outliers of samples at each position, or of precomputed statistics, with notches, means and jittered points; drawn as batched GPU fills, lines and markers.",
        "docsPage": "box",
        "plotlyEquivalent": "box"
      },
      "attributes": {
        "description": "Box plot: quartiles, median, whiskers and outliers of samples (or of precomputed statistics) at each position.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x samples: the values of horizontal boxes when `y` is not given, else the position of each sample (one box per distinct x) for vertical boxes. With precomputed statistics (`q1`, `median`, `q3`): the position of each box, or one sample array per box on the value axis.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "y samples: the values of horizontal boxes when `x` is not given, else the position of each sample (one box per distinct y) for vertical boxes. With precomputed statistics (`q1`, `median`, `q3`): the position of each box, or one sample array per box on the value axis.",
          "valType": "data_array"
        },
        "x0": {
          "editType": "calc",
          "description": "Position of the box when `x` is not given. Default: the trace name on category axes (and numeric or date names on linear, log and date axes), else the box's index among the box traces.",
          "valType": "any"
        },
        "y0": {
          "editType": "calc",
          "description": "Position of the box when `y` is not given. Default: the trace name on category axes (and numeric or date names on linear, log and date axes), else the box's index among the box traces.",
          "valType": "any"
        },
        "dx": {
          "editType": "calc",
          "description": "Step between the positions of precomputed boxes when `x` is not given: box `i` is at `x0 + i·dx`. Default 1.",
          "valType": "number"
        },
        "dy": {
          "editType": "calc",
          "description": "Step between the positions of precomputed horizontal boxes when `y` is not given. Default 1.",
          "valType": "number"
        },
        "q1": {
          "editType": "calc",
          "role": "data",
          "description": "Precomputed first quartiles, one per box. With `median` and `q3`, switches the trace to precomputed statistics.",
          "valType": "data_array"
        },
        "median": {
          "editType": "calc",
          "role": "data",
          "description": "Precomputed medians, one per box.",
          "valType": "data_array"
        },
        "q3": {
          "editType": "calc",
          "role": "data",
          "description": "Precomputed third quartiles, one per box.",
          "valType": "data_array"
        },
        "lowerfence": {
          "editType": "calc",
          "role": "data",
          "description": "Precomputed lower whisker ends, one per box. Default: the lowest sample within 1.5 IQR of q1 when samples are given, else q1.",
          "valType": "data_array"
        },
        "upperfence": {
          "editType": "calc",
          "role": "data",
          "description": "Precomputed upper whisker ends, one per box. Default: the highest sample within 1.5 IQR of q3 when samples are given, else q3.",
          "valType": "data_array"
        },
        "mean": {
          "editType": "calc",
          "role": "data",
          "description": "Precomputed means, one per box (turns `boxmean` on by default). Default: the sample mean, else (q1 + q3) / 2.",
          "valType": "data_array"
        },
        "sd": {
          "editType": "calc",
          "role": "data",
          "description": "Precomputed standard deviations, one per box (with `mean`, makes `boxmean: 'sd'` the default). Default: the sample standard deviation, else q3 − q1.",
          "valType": "data_array"
        },
        "notchspan": {
          "editType": "calc",
          "role": "data",
          "description": "Precomputed notch half-heights, one per box (turns `notched` on by default). Default: 1.57 · IQR / √n.",
          "valType": "data_array"
        },
        "notched": {
          "editType": "calc",
          "description": "Draw notches at the median's 95% confidence interval (median ± 1.57 · IQR / √n): boxes whose notches don't overlap have different medians with roughly 95% confidence. Default: true when `notchwidth` (or `notchspan`) is set.",
          "valType": "boolean"
        },
        "notchwidth": {
          "min": 0,
          "max": 0.5,
          "dflt": 0.25,
          "editType": "calc",
          "description": "How far notches cut into the box, as a fraction of its width (0–0.5).",
          "valType": "number"
        },
        "boxpoints": {
          "values": ["all", "outliers", "suspectedoutliers", false],
          "editType": "calc",
          "description": "Which samples are drawn as points: `'all'`, only those beyond the whiskers (`'outliers'`, the default), those plus a highlight of the ones between the whiskers and 3 IQR from the quartiles (`'suspectedoutliers'`, styled by `marker.outliercolor` and `marker.line.outlier*`), or none (`false`, the whiskers then reach the extreme samples). Default: `'suspectedoutliers'` when an outlier color is set, `'all'` with precomputed statistics, else `'outliers'`.",
          "valType": "enumerated"
        },
        "jitter": {
          "min": 0,
          "max": 1,
          "editType": "calc",
          "description": "Random spread of the points across the position axis, as a fraction of the box width (0: all on one line). Denser stretches spread more. Default: 0.3 with `boxpoints: 'all'`, else 0. The spread is repeatable (Plotly's seeded generator).",
          "valType": "number"
        },
        "pointpos": {
          "min": -2,
          "max": 2,
          "editType": "calc",
          "description": "Where the points sit relative to the box, in box half-widths: 0 on its center line, 1 on its right (or top) edge, −2 one box width to the left (or below). Default: −1.5 with `boxpoints: 'all'`, else 0.",
          "valType": "number"
        },
        "sdmultiple": {
          "min": 0,
          "dflt": 1,
          "editType": "calc",
          "description": "How many standard deviations the `sizemode: 'sd'` box and the `boxmean: 'sd'` diamond span on each side of the mean.",
          "valType": "number"
        },
        "sizemode": {
          "values": ["quartiles", "sd"],
          "dflt": "quartiles",
          "editType": "calc",
          "description": "`'quartiles'`: the box spans q1–q3 with a line at the median; `'sd'`: it spans mean ± `sdmultiple` standard deviations with a line at the mean (no whiskers by default).",
          "valType": "enumerated"
        },
        "boxmean": {
          "values": [true, "sd", false],
          "editType": "calc",
          "description": "Draw the mean as a dashed line (`true`), plus a dashed diamond spanning ± `sdmultiple` standard deviations (`'sd'`). Default: on with precomputed `mean` (and `'sd'` with `sd`).",
          "valType": "enumerated"
        },
        "orientation": {
          "values": ["v", "h"],
          "editType": "calc",
          "description": "`'v'`: vertical boxes at `x` positions over `y` values; `'h'`: horizontal ones at `y` positions. Default: `'v'` when `y` is given, else `'h'`.",
          "valType": "enumerated"
        },
        "width": {
          "min": 0,
          "dflt": 0,
          "editType": "calc",
          "description": "Box width in position-axis units (category slots, or ms on date axes). 0 (default): computed from the spacing of the positions and `layout.boxgap`, `boxgroupgap` and `boxmode`.",
          "valType": "number"
        },
        "offsetgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "With `layout.boxmode: 'group'`, traces with the same offset group share one slot at each position; different offset groups sit side by side.",
          "valType": "string"
        },
        "alignmentgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces on the same position axis with the same alignment group split each position between their offset groups; different alignment groups lay out independently.",
          "valType": "string"
        },
        "quartilemethod": {
          "values": ["linear", "exclusive", "inclusive"],
          "dflt": "linear",
          "editType": "calc",
          "description": "How quartiles are computed from samples: `linear` interpolates over the whole sample (Plotly's method, the one most tools call type 5); for odd counts, `exclusive` takes the medians of the lower and upper halves without the median, `inclusive` with it. Even counts use `linear` in every method.",
          "valType": "enumerated"
        },
        "marker": {
          "editType": "calc",
          "description": "Style of the sample points.",
          "role": "object",
          "outliercolor": {
            "dflt": "rgba(0, 0, 0, 0)",
            "editType": "style",
            "description": "Fill of suspected outliers (between the whiskers and 3 IQR from the quartiles) with `'suspectedoutliers'`. Setting it makes that mode the default.",
            "valType": "color"
          },
          "symbol": {
            "values": [
              "circle",
              0,
              "0",
              "circle-open",
              100,
              "100",
              "circle-dot",
              200,
              "200",
              "circle-open-dot",
              300,
              "300",
              "square",
              1,
              "1",
              "square-open",
              101,
              "101",
              "square-dot",
              201,
              "201",
              "square-open-dot",
              301,
              "301",
              "diamond",
              2,
              "2",
              "diamond-open",
              102,
              "102",
              "diamond-dot",
              202,
              "202",
              "diamond-open-dot",
              302,
              "302",
              "cross",
              3,
              "3",
              "cross-open",
              103,
              "103",
              "cross-dot",
              203,
              "203",
              "cross-open-dot",
              303,
              "303",
              "x",
              4,
              "4",
              "x-open",
              104,
              "104",
              "x-dot",
              204,
              "204",
              "x-open-dot",
              304,
              "304",
              "triangle-up",
              5,
              "5",
              "triangle-up-open",
              105,
              "105",
              "triangle-up-dot",
              205,
              "205",
              "triangle-up-open-dot",
              305,
              "305",
              "triangle-down",
              6,
              "6",
              "triangle-down-open",
              106,
              "106",
              "triangle-down-dot",
              206,
              "206",
              "triangle-down-open-dot",
              306,
              "306",
              "triangle-left",
              7,
              "7",
              "triangle-left-open",
              107,
              "107",
              "triangle-left-dot",
              207,
              "207",
              "triangle-left-open-dot",
              307,
              "307",
              "triangle-right",
              8,
              "8",
              "triangle-right-open",
              108,
              "108",
              "triangle-right-dot",
              208,
              "208",
              "triangle-right-open-dot",
              308,
              "308",
              "triangle-ne",
              9,
              "9",
              "triangle-ne-open",
              109,
              "109",
              "triangle-ne-dot",
              209,
              "209",
              "triangle-ne-open-dot",
              309,
              "309",
              "triangle-se",
              10,
              "10",
              "triangle-se-open",
              110,
              "110",
              "triangle-se-dot",
              210,
              "210",
              "triangle-se-open-dot",
              310,
              "310",
              "triangle-sw",
              11,
              "11",
              "triangle-sw-open",
              111,
              "111",
              "triangle-sw-dot",
              211,
              "211",
              "triangle-sw-open-dot",
              311,
              "311",
              "triangle-nw",
              12,
              "12",
              "triangle-nw-open",
              112,
              "112",
              "triangle-nw-dot",
              212,
              "212",
              "triangle-nw-open-dot",
              312,
              "312",
              "pentagon",
              13,
              "13",
              "pentagon-open",
              113,
              "113",
              "pentagon-dot",
              213,
              "213",
              "pentagon-open-dot",
              313,
              "313",
              "hexagon",
              14,
              "14",
              "hexagon-open",
              114,
              "114",
              "hexagon-dot",
              214,
              "214",
              "hexagon-open-dot",
              314,
              "314",
              "hexagon2",
              15,
              "15",
              "hexagon2-open",
              115,
              "115",
              "hexagon2-dot",
              215,
              "215",
              "hexagon2-open-dot",
              315,
              "315",
              "octagon",
              16,
              "16",
              "octagon-open",
              116,
              "116",
              "octagon-dot",
              216,
              "216",
              "octagon-open-dot",
              316,
              "316",
              "star",
              17,
              "17",
              "star-open",
              117,
              "117",
              "star-dot",
              217,
              "217",
              "star-open-dot",
              317,
              "317",
              "hexagram",
              18,
              "18",
              "hexagram-open",
              118,
              "118",
              "hexagram-dot",
              218,
              "218",
              "hexagram-open-dot",
              318,
              "318",
              "star-triangle-up",
              19,
              "19",
              "star-triangle-up-open",
              119,
              "119",
              "star-triangle-up-dot",
              219,
              "219",
              "star-triangle-up-open-dot",
              319,
              "319",
              "star-triangle-down",
              20,
              "20",
              "star-triangle-down-open",
              120,
              "120",
              "star-triangle-down-dot",
              220,
              "220",
              "star-triangle-down-open-dot",
              320,
              "320",
              "star-square",
              21,
              "21",
              "star-square-open",
              121,
              "121",
              "star-square-dot",
              221,
              "221",
              "star-square-open-dot",
              321,
              "321",
              "star-diamond",
              22,
              "22",
              "star-diamond-open",
              122,
              "122",
              "star-diamond-dot",
              222,
              "222",
              "star-diamond-open-dot",
              322,
              "322",
              "diamond-tall",
              23,
              "23",
              "diamond-tall-open",
              123,
              "123",
              "diamond-tall-dot",
              223,
              "223",
              "diamond-tall-open-dot",
              323,
              "323",
              "diamond-wide",
              24,
              "24",
              "diamond-wide-open",
              124,
              "124",
              "diamond-wide-dot",
              224,
              "224",
              "diamond-wide-open-dot",
              324,
              "324",
              "hourglass",
              25,
              "25",
              "hourglass-open",
              125,
              "125",
              "hourglass-dot",
              225,
              "225",
              "hourglass-open-dot",
              325,
              "325",
              "bowtie",
              26,
              "26",
              "bowtie-open",
              126,
              "126",
              "bowtie-dot",
              226,
              "226",
              "bowtie-open-dot",
              326,
              "326",
              "circle-cross",
              27,
              "27",
              "circle-cross-open",
              127,
              "127",
              "circle-cross-dot",
              227,
              "227",
              "circle-cross-open-dot",
              327,
              "327",
              "circle-x",
              28,
              "28",
              "circle-x-open",
              128,
              "128",
              "circle-x-dot",
              228,
              "228",
              "circle-x-open-dot",
              328,
              "328",
              "square-cross",
              29,
              "29",
              "square-cross-open",
              129,
              "129",
              "square-cross-dot",
              229,
              "229",
              "square-cross-open-dot",
              329,
              "329",
              "square-x",
              30,
              "30",
              "square-x-open",
              130,
              "130",
              "square-x-dot",
              230,
              "230",
              "square-x-open-dot",
              330,
              "330",
              "diamond-cross",
              31,
              "31",
              "diamond-cross-open",
              131,
              "131",
              "diamond-cross-dot",
              231,
              "231",
              "diamond-cross-open-dot",
              331,
              "331",
              "diamond-x",
              32,
              "32",
              "diamond-x-open",
              132,
              "132",
              "diamond-x-dot",
              232,
              "232",
              "diamond-x-open-dot",
              332,
              "332",
              "cross-thin",
              33,
              "33",
              "cross-thin-open",
              133,
              "133",
              "cross-thin-dot",
              233,
              "233",
              "cross-thin-open-dot",
              333,
              "333",
              "x-thin",
              34,
              "34",
              "x-thin-open",
              134,
              "134",
              "x-thin-dot",
              234,
              "234",
              "x-thin-open-dot",
              334,
              "334",
              "asterisk",
              35,
              "35",
              "asterisk-open",
              135,
              "135",
              "asterisk-dot",
              235,
              "235",
              "asterisk-open-dot",
              335,
              "335",
              "hash",
              36,
              "36",
              "hash-open",
              136,
              "136",
              "hash-dot",
              236,
              "236",
              "hash-open-dot",
              336,
              "336",
              "y-up",
              37,
              "37",
              "y-up-open",
              137,
              "137",
              "y-up-dot",
              237,
              "237",
              "y-up-open-dot",
              337,
              "337",
              "y-down",
              38,
              "38",
              "y-down-open",
              138,
              "138",
              "y-down-dot",
              238,
              "238",
              "y-down-open-dot",
              338,
              "338",
              "y-left",
              39,
              "39",
              "y-left-open",
              139,
              "139",
              "y-left-dot",
              239,
              "239",
              "y-left-open-dot",
              339,
              "339",
              "y-right",
              40,
              "40",
              "y-right-open",
              140,
              "140",
              "y-right-dot",
              240,
              "240",
              "y-right-open-dot",
              340,
              "340",
              "line-ew",
              41,
              "41",
              "line-ew-open",
              141,
              "141",
              "line-ew-dot",
              241,
              "241",
              "line-ew-open-dot",
              341,
              "341",
              "line-ns",
              42,
              "42",
              "line-ns-open",
              142,
              "142",
              "line-ns-dot",
              242,
              "242",
              "line-ns-open-dot",
              342,
              "342",
              "line-ne",
              43,
              "43",
              "line-ne-open",
              143,
              "143",
              "line-ne-dot",
              243,
              "243",
              "line-ne-open-dot",
              343,
              "343",
              "line-nw",
              44,
              "44",
              "line-nw-open",
              144,
              "144",
              "line-nw-dot",
              244,
              "244",
              "line-nw-open-dot",
              344,
              "344",
              "arrow-up",
              45,
              "45",
              "arrow-up-open",
              145,
              "145",
              "arrow-up-dot",
              245,
              "245",
              "arrow-up-open-dot",
              345,
              "345",
              "arrow-down",
              46,
              "46",
              "arrow-down-open",
              146,
              "146",
              "arrow-down-dot",
              246,
              "246",
              "arrow-down-open-dot",
              346,
              "346",
              "arrow-left",
              47,
              "47",
              "arrow-left-open",
              147,
              "147",
              "arrow-left-dot",
              247,
              "247",
              "arrow-left-open-dot",
              347,
              "347",
              "arrow-right",
              48,
              "48",
              "arrow-right-open",
              148,
              "148",
              "arrow-right-dot",
              248,
              "248",
              "arrow-right-open-dot",
              348,
              "348",
              "arrow-bar-up",
              49,
              "49",
              "arrow-bar-up-open",
              149,
              "149",
              "arrow-bar-up-dot",
              249,
              "249",
              "arrow-bar-up-open-dot",
              349,
              "349",
              "arrow-bar-down",
              50,
              "50",
              "arrow-bar-down-open",
              150,
              "150",
              "arrow-bar-down-dot",
              250,
              "250",
              "arrow-bar-down-open-dot",
              350,
              "350",
              "arrow-bar-left",
              51,
              "51",
              "arrow-bar-left-open",
              151,
              "151",
              "arrow-bar-left-dot",
              251,
              "251",
              "arrow-bar-left-open-dot",
              351,
              "351",
              "arrow-bar-right",
              52,
              "52",
              "arrow-bar-right-open",
              152,
              "152",
              "arrow-bar-right-dot",
              252,
              "252",
              "arrow-bar-right-open-dot",
              352,
              "352",
              "arrow",
              53,
              "53",
              "arrow-open",
              153,
              "153",
              "arrow-dot",
              253,
              "253",
              "arrow-open-dot",
              353,
              "353",
              "arrow-wide",
              54,
              "54",
              "arrow-wide-open",
              154,
              "154",
              "arrow-wide-dot",
              254,
              "254",
              "arrow-wide-open-dot",
              354,
              "354"
            ],
            "dflt": "circle",
            "editType": "style",
            "description": "Point symbol: a name (`'diamond-open'`), a Plotly numeric code, a registered custom symbol or a `'text:…'` glyph.",
            "valType": "enumerated"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "editType": "style",
            "description": "Point opacity (multiplied by the trace `opacity`).",
            "valType": "number"
          },
          "angle": {
            "dflt": 0,
            "editType": "style",
            "description": "Point rotation in degrees, clockwise.",
            "valType": "angle"
          },
          "size": {
            "min": 0,
            "dflt": 6,
            "editType": "calc",
            "description": "Point diameter in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Point fill color. Default: `line.color`.",
            "valType": "color"
          },
          "line": {
            "editType": "style",
            "description": "Point outlines.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "editType": "style",
              "description": "Point outline color.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "editType": "style",
              "description": "Point outline width in CSS px.",
              "valType": "number"
            },
            "outliercolor": {
              "editType": "style",
              "description": "Outline color of suspected outliers with `'suspectedoutliers'`. Default: `marker.color`. Setting it makes that mode the default.",
              "valType": "color"
            },
            "outlierwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "style",
              "description": "Outline width (px) of suspected outliers with `'suspectedoutliers'`.",
              "valType": "number"
            }
          }
        },
        "line": {
          "editType": "style",
          "description": "Outline of the box.",
          "role": "object",
          "color": {
            "editType": "style",
            "description": "Outline color of the box, its median and whiskers. Default: `marker.color`, else the colorway.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Outline width in CSS px.",
            "valType": "number"
          }
        },
        "fillcolor": {
          "editType": "style",
          "description": "Fill color of the box. Default: `line.color` at half opacity.",
          "valType": "color"
        },
        "whiskerwidth": {
          "min": 0,
          "max": 1,
          "dflt": 0.5,
          "editType": "calc",
          "description": "Width of the whisker caps as a fraction of the box width (0: no caps).",
          "valType": "number"
        },
        "showwhiskers": {
          "editType": "calc",
          "description": "Draw the whiskers. Default: true, except with `sizemode: 'sd'`.",
          "valType": "boolean"
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected points while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Color of selected points.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of selected points.",
              "valType": "number"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected points while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Color of unselected points.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of unselected points. Default: 0.2 × the marker opacity.",
              "valType": "number"
            }
          }
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per sample, shown in the hover label of its point.",
          "valType": "string"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, violins draw below boxes and both below scatter traces (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "hoveron": {
          "flags": ["boxes", "points"],
          "dflt": "boxes+points",
          "editType": "style",
          "description": "What shows hover labels: the boxes (one label per statistic, as Plotly), the points, or both (a point under the pointer wins).",
          "valType": "flaglist"
        }
      }
    },
    "histogram": {
      "categories": ["cartesian", "bar-like", "histogram", "showLegend", "errorBarsOK"],
      "meta": {
        "description": "Histograms: samples binned into bars (counts, sums, averages, min or max per bin), normalized or cumulative, vertical or horizontal, grouped or stacked with bars (`layout.barmode`).",
        "docsPage": "histogram",
        "plotlyEquivalent": "histogram"
      },
      "attributes": {
        "description": "Histogram: samples binned into bars (counts, sums, averages…), vertical or horizontal, stacking and grouping with bars.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "Samples binned along x (vertical bars when only `x` is given): numbers, dates or category names depending on the axis type. With both `x` and `y`, the coordinate across the bars is what `histfunc` aggregates.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Samples binned along y (horizontal bars when only `y` is given): numbers, dates or category names depending on the axis type. With both `x` and `y`, the coordinate across the bars is what `histfunc` aggregates.",
          "valType": "data_array"
        },
        "orientation": {
          "values": ["v", "h"],
          "editType": "calc",
          "description": "`'v'`: bin `x` into vertical bars; `'h'`: bin `y` into horizontal bars. Defaults to `'h'` when only `y` is given.",
          "valType": "enumerated"
        },
        "histfunc": {
          "values": ["count", "sum", "avg", "min", "max"],
          "dflt": "count",
          "editType": "calc",
          "description": "What each bar shows: the number of samples in the bin (`count`), or the `sum`, average (`avg`), `min` or `max` of the other coordinate (`y` for vertical histograms) over the bin. Needs both coordinates for anything but `count`.",
          "valType": "enumerated"
        },
        "histnorm": {
          "values": ["", "percent", "probability", "density", "probability density"],
          "dflt": "",
          "editType": "calc",
          "description": "Normalization: `''` the raw values; `percent` / `probability` the share of the total (bar heights sum to 100 / 1); `density` the value per unit of bin width (bar areas sum to the total; per ms on date axes); `probability density` the share per unit width (bar areas sum to 1).",
          "valType": "enumerated"
        },
        "cumulative": {
          "editType": "calc",
          "description": "Cumulative histograms.",
          "role": "object",
          "enabled": {
            "dflt": false,
            "editType": "calc",
            "description": "Show the cumulative distribution: each bar sums the bins before it. With a `density` norm it behaves like the norm without density (it rises to the total or to 1).",
            "valType": "boolean"
          },
          "direction": {
            "values": ["increasing", "decreasing"],
            "dflt": "increasing",
            "editType": "calc",
            "description": "`increasing`: sum the bins to the left (rising); `decreasing`: sum the bins to the right.",
            "valType": "enumerated"
          },
          "currentbin": {
            "values": ["include", "exclude", "half"],
            "dflt": "include",
            "editType": "calc",
            "description": "Whether a bar counts its own bin (`include`, a half-bin bias), not at all (`exclude`, the opposite bias) or half of it (`half`, no bias).",
            "valType": "enumerated"
          }
        },
        "nbinsx": {
          "min": 0,
          "dflt": 0,
          "editType": "calc",
          "description": "Maximum number of bins along x: the bin size is the next round size giving at most this many. 0: automatic. Ignored when `xbins.size` is set.",
          "valType": "integer"
        },
        "xbins": {
          "editType": "calc",
          "description": "Bins along x. Unset parts are automatic; traces of one `bingroup` share them.",
          "role": "object",
          "start": {
            "editType": "calc",
            "description": "First bin edge along x. Default: the data minimum moved down to a round value, off the data (integer data in bins of 5 starts at -0.5, so 0–4 fall in the first bin). A date string on date axes, a category index (e.g. `-0.5`) on category axes. In a bin group, the first explicit start wins and the other traces' starts are moved down onto its bin grid.",
            "valType": "any"
          },
          "end": {
            "editType": "calc",
            "description": "Where binning stops along x: bins are added from `start` by `size` until one reaches or passes `end`. Default: the data maximum.",
            "valType": "any"
          },
          "size": {
            "editType": "calc",
            "description": "Bin width along x. Default: a round size giving about as many bins as samples per bin (with `nbinsx`: at most that many bins). On date axes, ms or `'M<n>'` for months (`'M1'`, `'M3'` quarters, `'M12'` years); on category axes, the number of categories per bin (default 1).",
            "valType": "any"
          }
        },
        "nbinsy": {
          "min": 0,
          "dflt": 0,
          "editType": "calc",
          "description": "Maximum number of bins along y (horizontal histograms), see `nbinsx`. Ignored when `ybins.size` is set.",
          "valType": "integer"
        },
        "ybins": {
          "editType": "calc",
          "description": "Bins along y. Unset parts are automatic; traces of one `bingroup` share them.",
          "role": "object",
          "start": {
            "editType": "calc",
            "description": "First bin edge along y. Default: the data minimum moved down to a round value, off the data (integer data in bins of 5 starts at -0.5, so 0–4 fall in the first bin). A date string on date axes, a category index (e.g. `-0.5`) on category axes. In a bin group, the first explicit start wins and the other traces' starts are moved down onto its bin grid.",
            "valType": "any"
          },
          "end": {
            "editType": "calc",
            "description": "Where binning stops along y: bins are added from `start` by `size` until one reaches or passes `end`. Default: the data maximum.",
            "valType": "any"
          },
          "size": {
            "editType": "calc",
            "description": "Bin width along y. Default: a round size giving about as many bins as samples per bin (with `nbinsy`: at most that many bins). On date axes, ms or `'M<n>'` for months (`'M1'`, `'M3'` quarters, `'M12'` years); on category axes, the number of categories per bin (default 1).",
            "valType": "any"
          }
        },
        "autobinx": {
          "editType": "calc",
          "description": "Obsolete (every bin attribute is automatic unless set): `true` ignores `xbins` and bins automatically.",
          "valType": "boolean"
        },
        "autobiny": {
          "editType": "calc",
          "description": "Obsolete: `true` ignores `ybins` and bins automatically.",
          "valType": "boolean"
        },
        "bingroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Histograms (and 2D histograms) with the same bin group share their bins, also across subplots on axes of one type. Under `barmode` `stack` or `group`, the histograms of a subplot and orientation always share bins.",
          "valType": "string"
        },
        "offsetgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces with the same offset group share one slot in `group` mode (and stack together in `stack`/`relative` modes); bars at the same position line up, also across subplots on the same position axis.",
          "valType": "string"
        },
        "alignmentgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces on the same position axis with the same alignment group split each position between their offset groups; different alignment groups lay out independently.",
          "valType": "string"
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per bar, drawn per `textposition` and shown in hover labels.",
          "valType": "string"
        },
        "texttemplate": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Template for bar labels, overriding `text`: `%{value}` (bar length), `%{label}` (position), `%{x}`, `%{y}`, `%{text}`, `%{customdata}`, `%{meta}`, with optional d3 formats (`%{value:.1f}`) or date formats (`%{x|%b %Y}`).",
          "valType": "string"
        },
        "textposition": {
          "values": ["inside", "outside", "auto", "none"],
          "dflt": "auto",
          "arrayOk": true,
          "editType": "calc",
          "description": "Where bar labels go: `inside` (against the bar end, see `insidetextanchor`), `outside` (past the bar end; inner bars of a stack stay inside), `auto` (inside when it fits, else outside), `none`.",
          "valType": "enumerated"
        },
        "insidetextanchor": {
          "values": ["end", "middle", "start"],
          "dflt": "end",
          "editType": "plot",
          "description": "Where inside labels sit along the bar.",
          "valType": "enumerated"
        },
        "textangle": {
          "dflt": "auto",
          "extras": ["auto"],
          "editType": "plot",
          "description": "Label rotation in degrees, clockwise. `'auto'` turns inside labels 90° when that fits the bar better.",
          "valType": "angle"
        },
        "textfont": {
          "editType": "calc",
          "description": "Font of bar labels. Defaults to `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "insidetextfont": {
          "editType": "calc",
          "description": "Font of labels inside bars. Defaults to `textfont`, with a color contrasting the bar fill.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "outsidetextfont": {
          "editType": "calc",
          "description": "Font of labels outside bars. Defaults to `textfont`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "calc",
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "arrayOk": true,
            "editType": "calc",
            "description": "Font size in CSS px, or one per bar.",
            "valType": "number"
          },
          "color": {
            "arrayOk": true,
            "editType": "style",
            "description": "Text color, or one per bar.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "calc",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "calc",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "constraintext": {
          "values": ["inside", "outside", "both", "none"],
          "dflt": "both",
          "editType": "calc",
          "description": "Shrink labels (inside, outside, or both) so they are no larger than their bar.",
          "valType": "enumerated"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, bars draw below scatter traces (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "cliponaxis": {
          "dflt": true,
          "editType": "plot",
          "description": "Clip labels to the plot area. `false` is not drawn yet: labels are always clipped to the subplot.",
          "valType": "boolean"
        },
        "marker": {
          "editType": "calc",
          "description": "Bar style.",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Bar fill color, one per bar, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Bar opacity (multiplied by the trace `opacity`), or one per bar.",
            "valType": "number"
          },
          "cornerradius": {
            "editType": "style",
            "description": "Corner radius in CSS px, or a percentage of the bar width (`'30%'`). Default: `layout.barcornerradius`. In stacks only the outermost bar is rounded.",
            "valType": "any"
          },
          "line": {
            "editType": "style",
            "description": "Bar outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Bar outline color, one per bar, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Bar outline width in CSS px (centered on the edge), or one per bar.",
              "valType": "number"
            }
          },
          "pattern": {
            "editType": "style",
            "description": "Hatch pattern of the bar fill (drawn in screen px, for print and grayscale).",
            "role": "object",
            "shape": {
              "values": ["", "/", "\\", "x", "-", "|", "+", "."],
              "dflt": "",
              "arrayOk": true,
              "editType": "style",
              "description": "Hatch shape: diagonal (`'/'`, `'\\\\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none, or one per bar.",
              "valType": "enumerated"
            },
            "fillmode": {
              "values": ["replace", "overlay"],
              "dflt": "replace",
              "editType": "style",
              "description": "`'replace'`: the pattern in the fill color on `bgcolor` (default transparent) replaces the fill; `'overlay'`: the pattern is drawn over the fill color, in its contrast color at half opacity by default.",
              "valType": "enumerated"
            },
            "bgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent, or one per bar.",
              "valType": "color"
            },
            "fgcolor": {
              "arrayOk": true,
              "editType": "style",
              "description": "Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`, or one per bar.",
              "valType": "color"
            },
            "fgopacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.",
              "valType": "number"
            },
            "size": {
              "min": 0,
              "dflt": 8,
              "arrayOk": true,
              "editType": "style",
              "description": "Size of the pattern's tiles in CSS px: the spacing of its lines or dots, or one per bar.",
              "valType": "number"
            },
            "solidity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "arrayOk": true,
              "editType": "style",
              "description": "Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color, or one per bar.",
              "valType": "number"
            }
          }
        },
        "error_x": {
          "editType": "calc",
          "description": "Error bars along the x axis.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive x axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative x axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive x axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative x axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Half-length of the cross-bar at each end, in CSS px (default 4). 0 hides the caps.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          },
          "copy_ystyle": {
            "editType": "style",
            "description": "Use the `error_y` color, thickness and width. Defaults to true when `error_y` is visible and none of those is set here.",
            "valType": "boolean"
          }
        },
        "error_y": {
          "editType": "calc",
          "description": "Error bars along the y axis.",
          "role": "object",
          "visible": {
            "editType": "calc",
            "description": "Whether this set of error bars is visible. Defaults to true when `array` or `value` is given, or `type` is `sqrt`.",
            "valType": "boolean"
          },
          "type": {
            "values": ["percent", "constant", "sqrt", "data"],
            "editType": "calc",
            "description": "How the bar lengths are computed: `'percent'` of the underlying value, a `'constant'`, the `'sqrt'` of the value, or per-point `'data'` (`array` / `arrayminus`). Defaults to `'data'` when `array` is given, else `'percent'`.",
            "valType": "enumerated"
          },
          "symmetric": {
            "editType": "calc",
            "description": "Whether both directions use the same length. Defaults to true unless `arrayminus` (`data`) or `valueminus` (`percent`, `constant`) is given.",
            "valType": "boolean"
          },
          "array": {
            "editType": "calc",
            "description": "Bar lengths in the positive y axis direction (or both directions when `symmetric`), one per point, for `type` `'data'`.",
            "valType": "data_array"
          },
          "arrayminus": {
            "editType": "calc",
            "description": "Bar lengths in the negative y axis direction, one per point, for `type` `'data'` with `symmetric: false`.",
            "valType": "data_array"
          },
          "value": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the positive y axis direction (or both when `symmetric`): a percentage of the value for `'percent'`, an absolute length for `'constant'`.",
            "valType": "number"
          },
          "valueminus": {
            "min": 0,
            "dflt": 10,
            "editType": "calc",
            "description": "Bar length in the negative y axis direction when `symmetric` is false (see `value`).",
            "valType": "number"
          },
          "traceref": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "tracerefminus": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Accepted for Plotly compatibility; has no effect.",
            "valType": "integer"
          },
          "thickness": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Stroke width of the bars and their end caps, in CSS px.",
            "valType": "number"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Half-length of the cross-bar at each end, in CSS px (default 4). 0 hides the caps.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Color of the bars. Defaults to the trace color.",
            "valType": "color"
          }
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected bars while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of selected bars.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of selected bars.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of selected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of selected bars.",
              "valType": "color"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected bars while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Fill color of unselected bars.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of unselected bars. Default: 0.2 × the bar opacity.",
              "valType": "number"
            }
          },
          "textfont": {
            "editType": "style",
            "description": "Text style of unselected bars.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Text color of unselected bars.",
              "valType": "color"
            }
          }
        }
      }
    },
    "histogram2d": {
      "categories": ["cartesian", "2dMap", "histogram", "showLegend"],
      "meta": {
        "description": "2D histograms: samples binned along x and y, counted or aggregated per cell, drawn as a GPU heatmap (one textured quad with a colorscale lookup).",
        "docsPage": "histogram2d",
        "plotlyEquivalent": "histogram2d"
      },
      "attributes": {
        "description": "2D histogram: samples binned along x and y, counted (or aggregated) per cell and drawn as a heatmap.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "Sample x coordinates (numbers, dates or categories), binned along x. Required, with `y`.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Sample y coordinates (numbers, dates or categories), binned along y. Required, with `x`.",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "description": "Values aggregated by `histfunc` (one per sample); counts are used without.",
          "valType": "data_array"
        },
        "marker": {
          "editType": "calc",
          "description": "Aggregation data (Plotly compatibility).",
          "role": "object",
          "color": {
            "editType": "calc",
            "description": "Aggregation values, used when `z` is not given.",
            "valType": "data_array"
          }
        },
        "histfunc": {
          "values": ["count", "sum", "avg", "min", "max"],
          "dflt": "count",
          "editType": "calc",
          "description": "What each bin shows: the number of samples (`count`), or the `sum`, average (`avg`), `min` or `max` of their `z` values.",
          "valType": "enumerated"
        },
        "histnorm": {
          "values": ["", "percent", "probability", "density", "probability density"],
          "dflt": "",
          "editType": "calc",
          "description": "Normalization: none, the percentage or fraction of the total (`percent`, `probability`), per unit area (`density`: value / bin area), or both (`probability density`, integrating to 1).",
          "valType": "enumerated"
        },
        "nbinsx": {
          "min": 0,
          "dflt": 0,
          "editType": "calc",
          "description": "Maximum number of x bins when `xbins.size` is not given (a nice round size is picked). 0: automatic.",
          "valType": "integer"
        },
        "xbins": {
          "editType": "calc",
          "description": "X binning.",
          "role": "object",
          "start": {
            "editType": "calc",
            "description": "First x bin edge. Default: the smallest sample, shifted down to a nice round value (integers get edges at half-integers). Dates as date strings; categories by their serial number (default -0.5).",
            "valType": "any"
          },
          "end": {
            "editType": "calc",
            "description": "Where x bins stop: edges step by `size` from `start` until they reach or pass `end`. Default: the largest sample.",
            "valType": "any"
          },
          "size": {
            "editType": "calc",
            "description": "Width of the x bins: a number, milliseconds or `'M<n>'` (months) on date axes, a number of categories on category axes. Default: a nice round size from `nbinsx` or the samples.",
            "valType": "any"
          }
        },
        "nbinsy": {
          "min": 0,
          "dflt": 0,
          "editType": "calc",
          "description": "Maximum number of y bins when `ybins.size` is not given (a nice round size is picked). 0: automatic.",
          "valType": "integer"
        },
        "ybins": {
          "editType": "calc",
          "description": "Y binning.",
          "role": "object",
          "start": {
            "editType": "calc",
            "description": "First y bin edge. Default: the smallest sample, shifted down to a nice round value (integers get edges at half-integers). Dates as date strings; categories by their serial number (default -0.5).",
            "valType": "any"
          },
          "end": {
            "editType": "calc",
            "description": "Where y bins stop: edges step by `size` from `start` until they reach or pass `end`. Default: the largest sample.",
            "valType": "any"
          },
          "size": {
            "editType": "calc",
            "description": "Width of the y bins: a number, milliseconds or `'M<n>'` (months) on date axes, a number of categories on category axes. Default: a nice round size from `nbinsy` or the samples.",
            "valType": "any"
          }
        },
        "autobinx": {
          "editType": "calc",
          "description": "Obsolete (Plotly compatibility): bins are automatic unless `xbins` sets them.",
          "valType": "boolean"
        },
        "autobiny": {
          "editType": "calc",
          "description": "Obsolete (Plotly compatibility): bins are automatic unless `ybins` sets them.",
          "valType": "boolean"
        },
        "bingroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Default of `xbingroup` and `ybingroup` (suffixed per direction): traces with the same `bingroup` get matching x bins and matching y bins.",
          "valType": "string"
        },
        "xbingroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces (histogram2d, histogram2dcontour, and histograms with the same `bingroup`) on axes of the same type with the same group share their x bins.",
          "valType": "string"
        },
        "ybingroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Like `xbingroup`, for y bins.",
          "valType": "string"
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of x values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of y values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels (and `%{z}` in templates).",
          "valType": "string"
        },
        "xgap": {
          "min": 0,
          "dflt": 0,
          "editType": "style",
          "description": "Horizontal gap between cells, in px (only without `zsmooth`).",
          "valType": "number"
        },
        "ygap": {
          "min": 0,
          "dflt": 0,
          "editType": "style",
          "description": "Vertical gap between cells, in px (only without `zsmooth`).",
          "valType": "number"
        },
        "zsmooth": {
          "values": ["fast", "best", false],
          "dflt": false,
          "editType": "style",
          "description": "Cell smoothing: none (`false`, flat cells), `'fast'` (bilinear between cell centers, by cell index) or `'best'` (bilinear between cell centers in data space, exact for uneven bins). Drawn on the GPU either way.",
          "valType": "enumerated"
        },
        "texttemplate": {
          "dflt": "",
          "editType": "plot",
          "description": "Label drawn in every cell: `%{z}` (the bin value), `%{x}`, `%{y}` (bin centers), with optional d3 formats (`%{z:.1f}`). Empty: no labels.",
          "valType": "string"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the cell labels (`texttemplate`).",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Font size in CSS px, or `'auto'`: the largest size (up to `layout.font.size`) at which labels fit their cells.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: black or white, whichever contrasts with the cell.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, heatmap-like traces draw below bars and scatter traces (Plotly’s layer order).",
          "valType": "integer"
        },
        "zauto": {
          "dflt": true,
          "editType": "style",
          "description": "Compute the color domain from the aggregated values. Defaults to false when both `zmin` and `zmax` are given.",
          "valType": "boolean"
        },
        "zmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `zmax`; turns `zauto` off).",
          "valType": "number"
        },
        "zmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `zmin`; turns `zauto` off).",
          "valType": "number"
        },
        "zmid": {
          "editType": "style",
          "description": "With `zauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "colorscale": {
          "editType": "style",
          "description": "Colorscale of the aggregated values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1. Default: Plotly's `RdBu`; the default `holochart` template uses its sequential neon plasma.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "dflt": false,
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (`layout.colorscale.sequential`, `sequentialminus` or `diverging`) instead of `colorscale`.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for the colorscale (drawn by the colorbar component).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "style",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this trace's colorscale attributes.",
          "valType": "subplotid"
        }
      }
    },
    "histogram2dcontour": {
      "categories": ["cartesian", "2dMap", "histogram", "contour", "showLegend"],
      "meta": {
        "description": "2D density contours: samples binned along x and y, drawn as filled contour bands, a smoothed heatmap or level lines, with labels along the lines.",
        "docsPage": "histogram2d-contour",
        "plotlyEquivalent": "histogram2dcontour"
      },
      "attributes": {
        "description": "2D density contours: samples binned along x and y like histogram2d, drawn as contour levels (filled bands, a heatmap, or lines) with optional level labels.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "Sample x coordinates (numbers, dates or categories), binned along x. Required, with `y`.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "Sample y coordinates (numbers, dates or categories), binned along y. Required, with `x`.",
          "valType": "data_array"
        },
        "z": {
          "editType": "calc",
          "description": "Values aggregated by `histfunc` (one per sample); counts are used without.",
          "valType": "data_array"
        },
        "marker": {
          "editType": "calc",
          "description": "Aggregation data (Plotly compatibility).",
          "role": "object",
          "color": {
            "editType": "calc",
            "description": "Aggregation values, used when `z` is not given.",
            "valType": "data_array"
          }
        },
        "histfunc": {
          "values": ["count", "sum", "avg", "min", "max"],
          "dflt": "count",
          "editType": "calc",
          "description": "What each bin shows: the number of samples (`count`), or the `sum`, average (`avg`), `min` or `max` of their `z` values.",
          "valType": "enumerated"
        },
        "histnorm": {
          "values": ["", "percent", "probability", "density", "probability density"],
          "dflt": "",
          "editType": "calc",
          "description": "Normalization: none, the percentage or fraction of the total (`percent`, `probability`), per unit area (`density`: value / bin area), or both (`probability density`, integrating to 1).",
          "valType": "enumerated"
        },
        "nbinsx": {
          "min": 0,
          "dflt": 0,
          "editType": "calc",
          "description": "Maximum number of x bins when `xbins.size` is not given (a nice round size is picked). 0: automatic.",
          "valType": "integer"
        },
        "xbins": {
          "editType": "calc",
          "description": "X binning.",
          "role": "object",
          "start": {
            "editType": "calc",
            "description": "First x bin edge. Default: the smallest sample, shifted down to a nice round value (integers get edges at half-integers). Dates as date strings; categories by their serial number (default -0.5).",
            "valType": "any"
          },
          "end": {
            "editType": "calc",
            "description": "Where x bins stop: edges step by `size` from `start` until they reach or pass `end`. Default: the largest sample.",
            "valType": "any"
          },
          "size": {
            "editType": "calc",
            "description": "Width of the x bins: a number, milliseconds or `'M<n>'` (months) on date axes, a number of categories on category axes. Default: a nice round size from `nbinsx` or the samples.",
            "valType": "any"
          }
        },
        "nbinsy": {
          "min": 0,
          "dflt": 0,
          "editType": "calc",
          "description": "Maximum number of y bins when `ybins.size` is not given (a nice round size is picked). 0: automatic.",
          "valType": "integer"
        },
        "ybins": {
          "editType": "calc",
          "description": "Y binning.",
          "role": "object",
          "start": {
            "editType": "calc",
            "description": "First y bin edge. Default: the smallest sample, shifted down to a nice round value (integers get edges at half-integers). Dates as date strings; categories by their serial number (default -0.5).",
            "valType": "any"
          },
          "end": {
            "editType": "calc",
            "description": "Where y bins stop: edges step by `size` from `start` until they reach or pass `end`. Default: the largest sample.",
            "valType": "any"
          },
          "size": {
            "editType": "calc",
            "description": "Width of the y bins: a number, milliseconds or `'M<n>'` (months) on date axes, a number of categories on category axes. Default: a nice round size from `nbinsy` or the samples.",
            "valType": "any"
          }
        },
        "autobinx": {
          "editType": "calc",
          "description": "Obsolete (Plotly compatibility): bins are automatic unless `xbins` sets them.",
          "valType": "boolean"
        },
        "autobiny": {
          "editType": "calc",
          "description": "Obsolete (Plotly compatibility): bins are automatic unless `ybins` sets them.",
          "valType": "boolean"
        },
        "bingroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Default of `xbingroup` and `ybingroup` (suffixed per direction): traces with the same `bingroup` get matching x bins and matching y bins.",
          "valType": "string"
        },
        "xbingroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces (histogram2d, histogram2dcontour, and histograms with the same `bingroup`) on axes of the same type with the same group share their x bins.",
          "valType": "string"
        },
        "ybingroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Like `xbingroup`, for y bins.",
          "valType": "string"
        },
        "xhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of x values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "yhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number or date format of y values in hover labels. Default: the axis format.",
          "valType": "string"
        },
        "zhoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "d3 number format of z values in hover labels (and `%{z}` in templates).",
          "valType": "string"
        },
        "autocontour": {
          "dflt": true,
          "editType": "calc",
          "description": "Pick the contour levels automatically (at most `ncontours`, at nice round values). Defaults to false when `contours.start` and `contours.end` are given.",
          "valType": "boolean"
        },
        "ncontours": {
          "min": 1,
          "dflt": 15,
          "editType": "calc",
          "description": "Maximum number of contour levels with `autocontour` (or without `contours.size`); the actual number is chosen to give nice round levels.",
          "valType": "integer"
        },
        "contours": {
          "editType": "calc",
          "description": "Contour levels, coloring, labels and constraints.",
          "role": "object",
          "type": {
            "values": ["levels", "constraint"],
            "dflt": "levels",
            "editType": "calc",
            "description": "`'levels'`: lines (and fills) at every level. `'constraint'`: the boundary of the region where `z` satisfies `operation` and `value`, with the region shaded in `fillcolor` for inequalities.",
            "valType": "enumerated"
          },
          "start": {
            "editType": "calc",
            "description": "First contour level (with `end`, turns `autocontour` off).",
            "valType": "number"
          },
          "end": {
            "editType": "calc",
            "description": "Last contour level (with `start`, turns `autocontour` off).",
            "valType": "number"
          },
          "size": {
            "min": 0,
            "editType": "calc",
            "description": "Step between contour levels. Default: a nice round step from `ncontours`.",
            "valType": "number"
          },
          "coloring": {
            "values": ["fill", "heatmap", "lines", "none"],
            "dflt": "fill",
            "editType": "calc",
            "description": "How levels are colored: flat bands between levels (`'fill'`), a smooth heatmap under the lines (`'heatmap'`), colored lines only (`'lines'`), or plain `line.color` lines (`'none'`). Not used by constraint contours.",
            "valType": "enumerated"
          },
          "showlines": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the contour lines (only for `coloring: 'fill'` and shaded constraints; always drawn otherwise).",
            "valType": "boolean"
          },
          "showlabels": {
            "dflt": false,
            "editType": "plot",
            "description": "Label contour lines with their level, along the lines (the lines break under the labels).",
            "valType": "boolean"
          },
          "labelfont": {
            "description": "Font of the level labels. Defaults to `layout.font`, colored like the lines.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "labelformat": {
            "dflt": "",
            "editType": "plot",
            "description": "d3 number format of the level labels, e.g. `.2f`. Default: automatic.",
            "valType": "string"
          },
          "operation": {
            "values": ["=", "<", ">=", ">", "<=", "[]", "()", "[)", "(]", "][", ")(", "](", ")["],
            "dflt": "=",
            "editType": "calc",
            "description": "Constraint contours: `'='` draws the line where `z` equals `value`; `'<'` / `'<='` and `'>'` / `'>='` shade where `z` is below or above `value`; `'[]'`, `'()'`, `'[)'`, `'(]'` shade inside the interval `value`, `'][', ')(', '](', ')['` outside it. Open and closed ends draw the same.",
            "valType": "enumerated"
          },
          "value": {
            "dflt": 0,
            "editType": "calc",
            "description": "Constraint contours: the boundary value, a number for comparisons, or `[lower, upper]` for intervals (a single number `v` means `[v, v + 1]`).",
            "valType": "any"
          }
        },
        "fillcolor": {
          "editType": "calc",
          "description": "Fill of the shaded region of constraint contours. Default: `line.color` (else the trace's colorway color) at half opacity.",
          "valType": "color"
        },
        "line": {
          "editType": "plot",
          "description": "Contour lines.",
          "role": "object",
          "color": {
            "editType": "style",
            "description": "Contour line color. Default: black; lines take their level's color with `coloring: 'lines'`. Constraint contours default to `fillcolor` made opaque.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 0.5,
            "editType": "style",
            "description": "Contour line width in px (default 0.5, or 2 for constraint contours).",
            "valType": "number"
          },
          "dash": {
            "dflt": "solid",
            "editType": "style",
            "description": "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.",
            "valType": "string"
          },
          "smoothing": {
            "min": 0,
            "max": 1.3,
            "dflt": 1,
            "editType": "plot",
            "description": "Smoothing of the contour lines and fills (Plotly’s spline smoothing): 0 draws straight segments between grid crossings.",
            "valType": "number"
          }
        },
        "texttemplate": {
          "dflt": "",
          "editType": "plot",
          "description": "Label drawn in every bin with `contours.coloring: 'heatmap'`: `%{z}`, `%{x}`, `%{y}` with optional d3 formats. Empty: no labels.",
          "valType": "string"
        },
        "textfont": {
          "editType": "plot",
          "description": "Font of the cell labels (`texttemplate`).",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Font size in CSS px, or `'auto'`: the largest size (up to `layout.font.size`) at which labels fit their cells.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: black or white, whichever contrasts with the cell.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          }
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, contours draw below bars and scatter traces (Plotly’s layer order).",
          "valType": "integer"
        },
        "zauto": {
          "dflt": true,
          "editType": "calc",
          "description": "Compute the color domain from the aggregated values. Defaults to false when both `zmin` and `zmax` are given.",
          "valType": "boolean"
        },
        "zmin": {
          "editType": "calc",
          "description": "Value mapped to the first colorscale color (with `zmax`; turns `zauto` off).",
          "valType": "number"
        },
        "zmax": {
          "editType": "calc",
          "description": "Value mapped to the last colorscale color (with `zmin`; turns `zauto` off).",
          "valType": "number"
        },
        "zmid": {
          "editType": "calc",
          "description": "With `zauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "colorscale": {
          "editType": "calc",
          "description": "Colorscale of the aggregated values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1. Default: Plotly's `RdBu`; the default `holochart` template uses its sequential neon plasma.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "calc",
          "description": "Pick the colorscale from the sign of the color domain (`layout.colorscale.sequential`, `sequentialminus` or `diverging`). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "calc",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for the colorscale (drawn by the colorbar component).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        },
        "coloraxis": {
          "dflt": "coloraxis",
          "editType": "calc",
          "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this trace's colorscale attributes.",
          "valType": "subplotid"
        }
      }
    },
    "parcats": {
      "categories": ["domain", "noOpacity"],
      "meta": {
        "description": "Parallel categories: category bands per dimension sized by count, with paths across them for each combination; hover for counts and probabilities, drag to reorder categories and dimensions.",
        "docsPage": "parallel-categories",
        "plotlyEquivalent": "parcats"
      },
      "attributes": {
        "description": "Parallel categories: one column of category bands per dimension, with paths across them sized by the number of samples; drag categories and dimensions to reorder them.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["count", "probability"],
          "extras": ["all", "none", "skip"],
          "dflt": "all",
          "editType": "none",
          "description": "Fields of the hover labels; `'none'` keeps the highlighting without labels, `'skip'` turns hover off.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "dimensions": {
          "editType": "calc",
          "description": "The dimensions, left to right: each sample is a path across them.",
          "itemName": "dimension",
          "role": "items",
          "items": {
            "role": "object",
            "label": {
              "editType": "plot",
              "description": "Dimension title, drawn above it.",
              "valType": "string"
            },
            "values": {
              "editType": "calc",
              "role": "data",
              "description": "The category of each sample in this dimension. A dimension without values is hidden.",
              "valType": "data_array"
            },
            "categoryorder": {
              "values": ["trace", "category ascending", "category descending", "array"],
              "editType": "calc",
              "description": "Order of the categories, top to bottom: first appearance (`'trace'`), sorted, or `categoryarray` (then unlisted values by appearance). Default: `'array'` when `categoryarray` is given, else `'trace'`. Dragging a category restyles it to `'array'`.",
              "valType": "enumerated"
            },
            "categoryarray": {
              "editType": "calc",
              "description": "The category order with `categoryorder: 'array'`.",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "calc",
              "description": "Category labels, one per `categoryarray` entry (`categoryorder: 'array'` only). Default: the values.",
              "valType": "data_array"
            },
            "displayindex": {
              "editType": "calc",
              "description": "Position of this dimension, left to right. Default: its index. Used only when the visible dimensions form a permutation of 0 … n − 1; dragging a dimension restyles it.",
              "valType": "integer"
            },
            "visible": {
              "dflt": true,
              "editType": "calc",
              "description": "Show this dimension. Hidden dimensions keep their place in `dimensions`.",
              "valType": "boolean"
            },
            "name": {
              "editType": "none",
              "description": "Name of this dimension, used to reference it from a template via `templateitemname`.",
              "valType": "string"
            },
            "templateitemname": {
              "editType": "plot",
              "description": "Name of a template dimension to inherit from. If no template item matches, this dimension is hidden (`visible: false`).",
              "valType": "string"
            }
          }
        },
        "counts": {
          "min": 0,
          "dflt": 1,
          "arrayOk": true,
          "editType": "calc",
          "description": "Weight of each sample (one for all, or one per sample; arrays repeat).",
          "valType": "number"
        },
        "line": {
          "editType": "calc",
          "description": "The paths, one per distinct combination and color.",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "calc",
            "description": "Path color: one CSS color, or one number per sample mapped through `line.colorscale` (samples of different colors form separate paths). Default: the trace color.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `line.color` values (one per sample): a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (`layout.colorscale.sequential`, `sequentialminus` or `diverging`) instead of `colorscale`.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for the line colorscale.",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "shape": {
            "values": ["linear", "hspline"],
            "dflt": "linear",
            "editType": "plot",
            "description": "Path shape between dimensions: straight or a horizontal S-curve.",
            "valType": "enumerated"
          },
          "hovertemplate": {
            "editType": "none",
            "description": "Template of the path hover labels: `%{count}`, `%{probability}`. Overrides `hoverinfo` for paths.",
            "valType": "string"
          }
        },
        "arrangement": {
          "values": ["perpendicular", "freeform", "fixed"],
          "dflt": "perpendicular",
          "editType": "plot",
          "description": "Dragging: categories move vertically and dimensions horizontally (`'perpendicular'`), categories move freely (`'freeform'`), or nothing moves (`'fixed'`).",
          "valType": "enumerated"
        },
        "bundlecolors": {
          "dflt": true,
          "editType": "plot",
          "description": "Group paths of the same color together within each category.",
          "valType": "boolean"
        },
        "sortpaths": {
          "values": ["forward", "backward"],
          "dflt": "forward",
          "editType": "plot",
          "description": "Stack paths by their categories from the leftmost dimension (`forward`) or the rightmost (`backward`).",
          "valType": "enumerated"
        },
        "hoveron": {
          "values": ["category", "color", "dimension"],
          "dflt": "category",
          "editType": "none",
          "description": "What a hover over a category band shows: the category, the colored band under the pointer (`'color'`), or every category of the dimension.",
          "valType": "enumerated"
        },
        "labelfont": {
          "editType": "plot",
          "description": "Font of the dimension labels. Default: `layout.font`.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "editType": "plot",
            "description": "Font size in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: `layout.font.color`.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          },
          "shadow": {
            "editType": "plot",
            "description": "CSS `text-shadow` (first shadow only), `'none'`, or `'auto'`: a thin halo in the text's contrast color. Tick labels default to `'auto'`, so they read over the lines.",
            "valType": "string"
          }
        },
        "tickfont": {
          "editType": "plot",
          "description": "Font of the category labels. Default: `layout.font`, 1/1.2 the size.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "editType": "plot",
            "description": "Font size in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: `layout.font.color`.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          },
          "shadow": {
            "editType": "plot",
            "description": "CSS `text-shadow` (first shadow only), `'none'`, or `'auto'`: a thin halo in the text's contrast color. Tick labels default to `'auto'`, so they read over the lines.",
            "valType": "string"
          }
        }
      }
    },
    "parcoords": {
      "categories": ["domain", "noOpacity"],
      "meta": {
        "description": "Parallel coordinates: one axis per dimension and one GPU-drawn line per row, colored by a colorscale; brush axes to filter lines, drag labels to reorder axes.",
        "docsPage": "parallel-coordinates",
        "plotlyEquivalent": "parcoords"
      },
      "attributes": {
        "description": "Parallel coordinates: one vertical axis per dimension and one line per row across them, colored by `line.color`; brush the axes to filter lines and drag the labels to reorder them.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "domain": {
          "editType": "plot",
          "description": "Where this trace is drawn, as a part of the plot area.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "dimensions": {
          "editType": "calc",
          "description": "The dimensions (vertical axes), left to right. At most 60 are drawn.",
          "itemName": "dimension",
          "role": "items",
          "items": {
            "role": "object",
            "label": {
              "editType": "plot",
              "description": "Axis title, drawn above (or below, `labelside`) the axis.",
              "valType": "string"
            },
            "values": {
              "editType": "calc",
              "role": "data",
              "description": "The values of this dimension, one per line (row). A dimension without values is hidden.",
              "valType": "data_array"
            },
            "range": {
              "items": [
                {
                  "editType": "calc",
                  "valType": "number"
                },
                {
                  "editType": "calc",
                  "valType": "number"
                }
              ],
              "editType": "calc",
              "description": "The axis range `[bottom, top]`. Default: the extent of `values`. `[high, low]` flips the axis.",
              "valType": "info_array"
            },
            "constraintrange": {
              "items": {
                "editType": "style",
                "valType": "any"
              },
              "freeLength": true,
              "editType": "style",
              "description": "The brushed (selected) interval `[lo, hi]`, or several `[[lo, hi], [lo2, hi2]]` with `multiselect`. Lines outside it on any constrained axis are drawn with the `unselected` style. Brushing an axis restyles this attribute.",
              "valType": "info_array"
            },
            "multiselect": {
              "dflt": true,
              "editType": "plot",
              "description": "Allow several constraint ranges on this axis: a new brush adds a range instead of replacing it.",
              "valType": "boolean"
            },
            "tickvals": {
              "editType": "plot",
              "description": "Tick positions. With `tickvals` the axis is ordinal: brushes snap to the ticks and a click selects one.",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "plot",
              "description": "Tick labels, one per `tickvals` entry.",
              "valType": "data_array"
            },
            "tickformat": {
              "dflt": "",
              "editType": "plot",
              "description": "d3-format specifier of the tick labels (e.g. `,.2f`, `.0%`).",
              "valType": "string"
            },
            "visible": {
              "dflt": true,
              "editType": "calc",
              "description": "Show this dimension. Hidden dimensions keep their place in `dimensions`.",
              "valType": "boolean"
            },
            "name": {
              "editType": "none",
              "description": "Name of this dimension, used to reference it from a template via `templateitemname`.",
              "valType": "string"
            },
            "templateitemname": {
              "editType": "plot",
              "description": "Name of a template dimension to inherit from. If no template item matches, this dimension is hidden (`visible: false`).",
              "valType": "string"
            }
          }
        },
        "line": {
          "editType": "calc",
          "description": "The lines, one per row of the dimensions.",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "calc",
            "description": "Line color: one CSS color, or one number per line mapped through `line.colorscale` (lines with higher values are drawn on top). Default: the trace color.",
            "valType": "color"
          },
          "colorscale": {
            "dflt": "Viridis",
            "editType": "style",
            "description": "Colorscale for numeric `line.color` values (one per line): a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (`layout.colorscale.sequential`, `sequentialminus` or `diverging`) instead of `colorscale`.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for the line colorscale.",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of the lines outside the constraint ranges.",
          "role": "object",
          "line": {
            "editType": "style",
            "description": "Unselected lines.",
            "role": "object",
            "color": {
              "dflt": "#7f7f7f",
              "editType": "style",
              "description": "Color of the lines outside the constraint ranges.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "style",
              "description": "Opacity of the unselected lines. `'auto'`: `max(1/255, (1/N)^(1/3))` for N lines, so dense plots stay readable.",
              "valType": "number"
            }
          }
        },
        "labelangle": {
          "dflt": 0,
          "editType": "plot",
          "description": "Rotation of the axis labels, in degrees (clockwise).",
          "valType": "angle"
        },
        "labelside": {
          "values": ["top", "bottom"],
          "dflt": "top",
          "editType": "plot",
          "description": "Draw the axis labels above (`top`) or below (`bottom`) the axes.",
          "valType": "enumerated"
        },
        "labelfont": {
          "editType": "plot",
          "description": "Font of the axis labels. Default: `layout.font`, 1/1.2 the size.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "editType": "plot",
            "description": "Font size in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: `layout.font.color`.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          },
          "shadow": {
            "editType": "plot",
            "description": "CSS `text-shadow` (first shadow only), `'none'`, or `'auto'`: a thin halo in the text's contrast color. Tick labels default to `'auto'`, so they read over the lines.",
            "valType": "string"
          }
        },
        "tickfont": {
          "editType": "plot",
          "description": "Font of the tick labels. Default: `layout.font`, 1/1.2 the size.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "editType": "plot",
            "description": "Font size in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: `layout.font.color`.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          },
          "shadow": {
            "editType": "plot",
            "description": "CSS `text-shadow` (first shadow only), `'none'`, or `'auto'`: a thin halo in the text's contrast color. Tick labels default to `'auto'`, so they read over the lines.",
            "valType": "string"
          }
        },
        "rangefont": {
          "editType": "plot",
          "description": "Font of the range labels at both ends of each axis. Default: `layout.font`, 1/1.2 the size.",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "editType": "plot",
            "description": "CSS font-family list. Default: `layout.font.family`.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "editType": "plot",
            "description": "Font size in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Text color. Default: `layout.font.color`.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "editType": "plot",
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "editType": "plot",
            "description": "Font style.",
            "valType": "enumerated"
          },
          "shadow": {
            "editType": "plot",
            "description": "CSS `text-shadow` (first shadow only), `'none'`, or `'auto'`: a thin halo in the text's contrast color. Tick labels default to `'auto'`, so they read over the lines.",
            "valType": "string"
          }
        }
      }
    },
    "splom": {
      "categories": ["symbols", "showLegend"],
      "meta": {
        "description": "Scatter plot matrix: every pair of dimensions as a scatter plot in a grid of subplots, with linked box / lasso selection across cells; each dimension is uploaded to the GPU once and shared by every cell.",
        "docsPage": "splom",
        "plotlyEquivalent": "splom"
      },
      "attributes": {
        "description": "Scatter plot matrix: every pair of dimensions as a scatter plot, one cell per pair, with linked selection across cells.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "dimensions": {
          "editType": "calc",
          "description": "The dimensions of the matrix: one row and one column per dimension, in order (row 0 on top).",
          "itemName": "dimension",
          "role": "items",
          "items": {
            "role": "object",
            "visible": {
              "dflt": true,
              "editType": "calc",
              "description": "Whether the dimension is drawn. A hidden dimension keeps its row and column, empty. Forced to `false` without `values`.",
              "valType": "boolean"
            },
            "label": {
              "editType": "calc",
              "description": "Label of the dimension: the default title of its axes and the name hover labels give its values.",
              "valType": "string"
            },
            "values": {
              "editType": "calc",
              "role": "data",
              "description": "Values of the dimension, one per sample (numbers, dates or categories; typed arrays are used as they are). Every dimension indexes the same samples; the shortest one sets the sample count.",
              "valType": "data_array"
            },
            "axis": {
              "editType": "calc",
              "description": "Defaults for the dimension's axes.",
              "role": "object",
              "type": {
                "values": ["linear", "log", "date", "category"],
                "editType": "calc",
                "description": "Default `type` of the dimension's axes. Without it the type is detected from `values`.",
                "valType": "enumerated"
              },
              "matches": {
                "dflt": false,
                "editType": "calc",
                "description": "Link the dimension's x and y axes (`matches`), so zooming one zooms the other.",
                "valType": "boolean"
              }
            },
            "name": {
              "editType": "none",
              "description": "Name of this dimension, used to reference it from a template via `templateitemname`.",
              "valType": "string"
            },
            "templateitemname": {
              "editType": "plot",
              "description": "Name of a template dimension to inherit from. If no template item matches, this dimension is hidden (`visible: false`).",
              "valType": "string"
            }
          }
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per sample, shown in hover labels.",
          "valType": "string"
        },
        "diagonal": {
          "editType": "calc",
          "description": "The diagonal cells.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "calc",
            "description": "Whether the diagonal cells (each dimension against itself: the samples on a line) are drawn.",
            "valType": "boolean"
          }
        },
        "showupperhalf": {
          "dflt": true,
          "editType": "calc",
          "description": "Whether the cells above the diagonal are drawn.",
          "valType": "boolean"
        },
        "showlowerhalf": {
          "dflt": true,
          "editType": "calc",
          "description": "Whether the cells below the diagonal are drawn.",
          "valType": "boolean"
        },
        "xaxes": {
          "items": {
            "dflt": "x",
            "editType": "plot",
            "valType": "subplotid"
          },
          "freeLength": true,
          "editType": "calc",
          "description": "The x axis of each dimension, in order (`'x'`, `'x2'`, …). Default `['x', 'x2', …]`, one per dimension. Dimension `i` is drawn along the column of this axis.",
          "valType": "info_array"
        },
        "yaxes": {
          "items": {
            "dflt": "y",
            "editType": "plot",
            "valType": "subplotid"
          },
          "freeLength": true,
          "editType": "calc",
          "description": "The y axis of each dimension, in order (`'y'`, `'y2'`, …). Default `['y', 'y2', …]`, one per dimension. Dimension `i` is drawn along the row of this axis.",
          "valType": "info_array"
        },
        "marker": {
          "editType": "calc",
          "description": "Marker style, the same in every cell: color (per sample, or numbers mapped through `colorscale` with an optional colorbar), size, symbol, opacity, angle and outline.",
          "role": "object",
          "color": {
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker fill color, one CSS color per point, or numbers mapped through `colorscale`. Defaults to the colorway.",
            "valType": "color"
          },
          "colorscale": {
            "editType": "style",
            "description": "Colorscale for numeric `marker.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
            "valType": "colorscale"
          },
          "autocolorscale": {
            "editType": "style",
            "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
            "valType": "boolean"
          },
          "reversescale": {
            "dflt": false,
            "editType": "style",
            "description": "Reverse the colorscale (the lowest value gets the last color).",
            "valType": "boolean"
          },
          "cauto": {
            "editType": "style",
            "description": "Compute the color domain from the numeric `marker.color` values. Defaults to false when both `cmin` and `cmax` are given.",
            "valType": "boolean"
          },
          "cmin": {
            "editType": "style",
            "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
            "valType": "number"
          },
          "cmax": {
            "editType": "style",
            "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
            "valType": "number"
          },
          "cmid": {
            "editType": "style",
            "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
            "valType": "number"
          },
          "showscale": {
            "dflt": false,
            "editType": "colorbars",
            "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
            "valType": "boolean"
          },
          "colorbar": {
            "editType": "colorbars+layout",
            "description": "The colorbar of this colorscale (plan E5.3).",
            "role": "object",
            "orientation": {
              "values": ["h", "v"],
              "dflt": "v",
              "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
              "valType": "enumerated"
            },
            "thicknessmode": {
              "values": ["fraction", "pixels"],
              "dflt": "pixels",
              "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
              "valType": "enumerated"
            },
            "thickness": {
              "min": 0,
              "dflt": 30,
              "description": "Thickness of the color bar.",
              "valType": "number"
            },
            "lenmode": {
              "values": ["fraction", "pixels"],
              "dflt": "fraction",
              "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
              "valType": "enumerated"
            },
            "len": {
              "min": 0,
              "dflt": 1,
              "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
              "valType": "number"
            },
            "x": {
              "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
              "valType": "number"
            },
            "xref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
              "valType": "enumerated"
            },
            "xpad": {
              "min": 0,
              "dflt": 10,
              "description": "Horizontal padding, px.",
              "valType": "number"
            },
            "y": {
              "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
              "valType": "number"
            },
            "yref": {
              "values": ["container", "paper"],
              "dflt": "paper",
              "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
              "valType": "enumerated"
            },
            "ypad": {
              "min": 0,
              "dflt": 10,
              "description": "Vertical padding, px.",
              "valType": "number"
            },
            "outlinecolor": {
              "dflt": "#444",
              "description": "Color of the outline around the bar.",
              "valType": "color"
            },
            "outlinewidth": {
              "min": 0,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "bordercolor": {
              "dflt": "#444",
              "description": "Border color of the colorbar box.",
              "valType": "color"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 0,
              "description": "Border width of the box, px.",
              "valType": "number"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Background of the box.",
              "valType": "color"
            },
            "tickmode": {
              "values": ["auto", "linear", "array", "sync"],
              "editType": "colorbars+layout",
              "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
              "valType": "enumerated"
            },
            "nticks": {
              "min": 0,
              "dflt": 0,
              "editType": "colorbars+layout",
              "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
              "valType": "integer"
            },
            "tick0": {
              "editType": "colorbars+layout",
              "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
              "valType": "any"
            },
            "dtick": {
              "editType": "colorbars+layout",
              "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
              "valType": "any"
            },
            "tickvals": {
              "editType": "colorbars+layout",
              "description": "Tick positions for `tickmode: array` (data units).",
              "valType": "data_array"
            },
            "ticktext": {
              "editType": "colorbars+layout",
              "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
              "valType": "data_array"
            },
            "ticks": {
              "values": ["outside", "inside", ""],
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
              "valType": "enumerated"
            },
            "ticklen": {
              "min": 0,
              "dflt": 5,
              "editType": "colorbars+layout",
              "description": "Tick length in px.",
              "valType": "number"
            },
            "tickwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Tick width in px.",
              "valType": "number"
            },
            "tickcolor": {
              "editType": "colorbars+layout",
              "description": "Tick color. Defaults to `color`.",
              "valType": "color",
              "dflt": "#444"
            },
            "ticklabelposition": {
              "values": [
                "outside",
                "inside",
                "outside top",
                "inside top",
                "outside bottom",
                "inside bottom",
                "outside left",
                "inside left",
                "outside right",
                "inside right"
              ],
              "dflt": "outside",
              "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
              "valType": "enumerated"
            },
            "ticklabeloverflow": {
              "values": ["allow", "hide past div", "hide past domain"],
              "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
              "valType": "enumerated"
            },
            "ticklabelstep": {
              "min": 1,
              "dflt": 1,
              "editType": "colorbars+layout",
              "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
              "valType": "integer"
            },
            "showticklabels": {
              "dflt": true,
              "editType": "colorbars+layout",
              "description": "Show tick labels.",
              "valType": "boolean"
            },
            "tickfont": {
              "description": "Tick-label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "tickangle": {
              "extras": ["auto"],
              "dflt": "auto",
              "editType": "colorbars+layout",
              "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
              "valType": "angle"
            },
            "tickformat": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
              "valType": "string"
            },
            "tickprefix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text before each tick label.",
              "valType": "string"
            },
            "showtickprefix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `tickprefix`.",
              "valType": "enumerated"
            },
            "ticksuffix": {
              "dflt": "",
              "editType": "colorbars+layout",
              "description": "Text after each tick label.",
              "valType": "string"
            },
            "showticksuffix": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels get `ticksuffix`.",
              "valType": "enumerated"
            },
            "separatethousands": {
              "dflt": false,
              "editType": "colorbars+layout",
              "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
              "valType": "boolean"
            },
            "exponentformat": {
              "values": ["none", "e", "E", "power", "SI", "B"],
              "dflt": "B",
              "editType": "colorbars+layout",
              "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
              "valType": "enumerated"
            },
            "minexponent": {
              "min": 0,
              "dflt": 3,
              "editType": "colorbars+layout",
              "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
              "valType": "number"
            },
            "showexponent": {
              "values": ["all", "first", "last", "none"],
              "dflt": "all",
              "editType": "colorbars+layout",
              "description": "Which tick labels show the exponent.",
              "valType": "enumerated"
            },
            "title": {
              "editType": "colorbars+layout",
              "description": "Colorbar title.",
              "role": "object",
              "text": {
                "dflt": "",
                "description": "Colorbar title.",
                "valType": "string"
              },
              "font": {
                "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              },
              "side": {
                "values": ["right", "top", "bottom"],
                "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
                "valType": "enumerated"
              }
            }
          },
          "coloraxis": {
            "dflt": "coloraxis",
            "editType": "style",
            "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
            "valType": "subplotid"
          },
          "size": {
            "min": 0,
            "dflt": 6,
            "arrayOk": true,
            "editType": "calc",
            "animatable": true,
            "description": "Marker diameter in CSS px, or one value per point (scaled by `sizeref`/`sizemode`).",
            "valType": "number"
          },
          "sizemode": {
            "values": ["diameter", "area"],
            "dflt": "diameter",
            "editType": "calc",
            "description": "How per-point `size` values become px: proportional to the diameter or to the area (bubble charts).",
            "valType": "enumerated"
          },
          "sizeref": {
            "dflt": 1,
            "editType": "calc",
            "description": "Divides per-point `size` values (bubble charts; see `sizemode`).",
            "valType": "number"
          },
          "sizemin": {
            "min": 0,
            "dflt": 0,
            "editType": "calc",
            "description": "Minimum radius (px) of markers with per-point `size` values.",
            "valType": "number"
          },
          "symbol": {
            "values": [
              "circle",
              0,
              "0",
              "circle-open",
              100,
              "100",
              "circle-dot",
              200,
              "200",
              "circle-open-dot",
              300,
              "300",
              "square",
              1,
              "1",
              "square-open",
              101,
              "101",
              "square-dot",
              201,
              "201",
              "square-open-dot",
              301,
              "301",
              "diamond",
              2,
              "2",
              "diamond-open",
              102,
              "102",
              "diamond-dot",
              202,
              "202",
              "diamond-open-dot",
              302,
              "302",
              "cross",
              3,
              "3",
              "cross-open",
              103,
              "103",
              "cross-dot",
              203,
              "203",
              "cross-open-dot",
              303,
              "303",
              "x",
              4,
              "4",
              "x-open",
              104,
              "104",
              "x-dot",
              204,
              "204",
              "x-open-dot",
              304,
              "304",
              "triangle-up",
              5,
              "5",
              "triangle-up-open",
              105,
              "105",
              "triangle-up-dot",
              205,
              "205",
              "triangle-up-open-dot",
              305,
              "305",
              "triangle-down",
              6,
              "6",
              "triangle-down-open",
              106,
              "106",
              "triangle-down-dot",
              206,
              "206",
              "triangle-down-open-dot",
              306,
              "306",
              "triangle-left",
              7,
              "7",
              "triangle-left-open",
              107,
              "107",
              "triangle-left-dot",
              207,
              "207",
              "triangle-left-open-dot",
              307,
              "307",
              "triangle-right",
              8,
              "8",
              "triangle-right-open",
              108,
              "108",
              "triangle-right-dot",
              208,
              "208",
              "triangle-right-open-dot",
              308,
              "308",
              "triangle-ne",
              9,
              "9",
              "triangle-ne-open",
              109,
              "109",
              "triangle-ne-dot",
              209,
              "209",
              "triangle-ne-open-dot",
              309,
              "309",
              "triangle-se",
              10,
              "10",
              "triangle-se-open",
              110,
              "110",
              "triangle-se-dot",
              210,
              "210",
              "triangle-se-open-dot",
              310,
              "310",
              "triangle-sw",
              11,
              "11",
              "triangle-sw-open",
              111,
              "111",
              "triangle-sw-dot",
              211,
              "211",
              "triangle-sw-open-dot",
              311,
              "311",
              "triangle-nw",
              12,
              "12",
              "triangle-nw-open",
              112,
              "112",
              "triangle-nw-dot",
              212,
              "212",
              "triangle-nw-open-dot",
              312,
              "312",
              "pentagon",
              13,
              "13",
              "pentagon-open",
              113,
              "113",
              "pentagon-dot",
              213,
              "213",
              "pentagon-open-dot",
              313,
              "313",
              "hexagon",
              14,
              "14",
              "hexagon-open",
              114,
              "114",
              "hexagon-dot",
              214,
              "214",
              "hexagon-open-dot",
              314,
              "314",
              "hexagon2",
              15,
              "15",
              "hexagon2-open",
              115,
              "115",
              "hexagon2-dot",
              215,
              "215",
              "hexagon2-open-dot",
              315,
              "315",
              "octagon",
              16,
              "16",
              "octagon-open",
              116,
              "116",
              "octagon-dot",
              216,
              "216",
              "octagon-open-dot",
              316,
              "316",
              "star",
              17,
              "17",
              "star-open",
              117,
              "117",
              "star-dot",
              217,
              "217",
              "star-open-dot",
              317,
              "317",
              "hexagram",
              18,
              "18",
              "hexagram-open",
              118,
              "118",
              "hexagram-dot",
              218,
              "218",
              "hexagram-open-dot",
              318,
              "318",
              "star-triangle-up",
              19,
              "19",
              "star-triangle-up-open",
              119,
              "119",
              "star-triangle-up-dot",
              219,
              "219",
              "star-triangle-up-open-dot",
              319,
              "319",
              "star-triangle-down",
              20,
              "20",
              "star-triangle-down-open",
              120,
              "120",
              "star-triangle-down-dot",
              220,
              "220",
              "star-triangle-down-open-dot",
              320,
              "320",
              "star-square",
              21,
              "21",
              "star-square-open",
              121,
              "121",
              "star-square-dot",
              221,
              "221",
              "star-square-open-dot",
              321,
              "321",
              "star-diamond",
              22,
              "22",
              "star-diamond-open",
              122,
              "122",
              "star-diamond-dot",
              222,
              "222",
              "star-diamond-open-dot",
              322,
              "322",
              "diamond-tall",
              23,
              "23",
              "diamond-tall-open",
              123,
              "123",
              "diamond-tall-dot",
              223,
              "223",
              "diamond-tall-open-dot",
              323,
              "323",
              "diamond-wide",
              24,
              "24",
              "diamond-wide-open",
              124,
              "124",
              "diamond-wide-dot",
              224,
              "224",
              "diamond-wide-open-dot",
              324,
              "324",
              "hourglass",
              25,
              "25",
              "hourglass-open",
              125,
              "125",
              "hourglass-dot",
              225,
              "225",
              "hourglass-open-dot",
              325,
              "325",
              "bowtie",
              26,
              "26",
              "bowtie-open",
              126,
              "126",
              "bowtie-dot",
              226,
              "226",
              "bowtie-open-dot",
              326,
              "326",
              "circle-cross",
              27,
              "27",
              "circle-cross-open",
              127,
              "127",
              "circle-cross-dot",
              227,
              "227",
              "circle-cross-open-dot",
              327,
              "327",
              "circle-x",
              28,
              "28",
              "circle-x-open",
              128,
              "128",
              "circle-x-dot",
              228,
              "228",
              "circle-x-open-dot",
              328,
              "328",
              "square-cross",
              29,
              "29",
              "square-cross-open",
              129,
              "129",
              "square-cross-dot",
              229,
              "229",
              "square-cross-open-dot",
              329,
              "329",
              "square-x",
              30,
              "30",
              "square-x-open",
              130,
              "130",
              "square-x-dot",
              230,
              "230",
              "square-x-open-dot",
              330,
              "330",
              "diamond-cross",
              31,
              "31",
              "diamond-cross-open",
              131,
              "131",
              "diamond-cross-dot",
              231,
              "231",
              "diamond-cross-open-dot",
              331,
              "331",
              "diamond-x",
              32,
              "32",
              "diamond-x-open",
              132,
              "132",
              "diamond-x-dot",
              232,
              "232",
              "diamond-x-open-dot",
              332,
              "332",
              "cross-thin",
              33,
              "33",
              "cross-thin-open",
              133,
              "133",
              "cross-thin-dot",
              233,
              "233",
              "cross-thin-open-dot",
              333,
              "333",
              "x-thin",
              34,
              "34",
              "x-thin-open",
              134,
              "134",
              "x-thin-dot",
              234,
              "234",
              "x-thin-open-dot",
              334,
              "334",
              "asterisk",
              35,
              "35",
              "asterisk-open",
              135,
              "135",
              "asterisk-dot",
              235,
              "235",
              "asterisk-open-dot",
              335,
              "335",
              "hash",
              36,
              "36",
              "hash-open",
              136,
              "136",
              "hash-dot",
              236,
              "236",
              "hash-open-dot",
              336,
              "336",
              "y-up",
              37,
              "37",
              "y-up-open",
              137,
              "137",
              "y-up-dot",
              237,
              "237",
              "y-up-open-dot",
              337,
              "337",
              "y-down",
              38,
              "38",
              "y-down-open",
              138,
              "138",
              "y-down-dot",
              238,
              "238",
              "y-down-open-dot",
              338,
              "338",
              "y-left",
              39,
              "39",
              "y-left-open",
              139,
              "139",
              "y-left-dot",
              239,
              "239",
              "y-left-open-dot",
              339,
              "339",
              "y-right",
              40,
              "40",
              "y-right-open",
              140,
              "140",
              "y-right-dot",
              240,
              "240",
              "y-right-open-dot",
              340,
              "340",
              "line-ew",
              41,
              "41",
              "line-ew-open",
              141,
              "141",
              "line-ew-dot",
              241,
              "241",
              "line-ew-open-dot",
              341,
              "341",
              "line-ns",
              42,
              "42",
              "line-ns-open",
              142,
              "142",
              "line-ns-dot",
              242,
              "242",
              "line-ns-open-dot",
              342,
              "342",
              "line-ne",
              43,
              "43",
              "line-ne-open",
              143,
              "143",
              "line-ne-dot",
              243,
              "243",
              "line-ne-open-dot",
              343,
              "343",
              "line-nw",
              44,
              "44",
              "line-nw-open",
              144,
              "144",
              "line-nw-dot",
              244,
              "244",
              "line-nw-open-dot",
              344,
              "344",
              "arrow-up",
              45,
              "45",
              "arrow-up-open",
              145,
              "145",
              "arrow-up-dot",
              245,
              "245",
              "arrow-up-open-dot",
              345,
              "345",
              "arrow-down",
              46,
              "46",
              "arrow-down-open",
              146,
              "146",
              "arrow-down-dot",
              246,
              "246",
              "arrow-down-open-dot",
              346,
              "346",
              "arrow-left",
              47,
              "47",
              "arrow-left-open",
              147,
              "147",
              "arrow-left-dot",
              247,
              "247",
              "arrow-left-open-dot",
              347,
              "347",
              "arrow-right",
              48,
              "48",
              "arrow-right-open",
              148,
              "148",
              "arrow-right-dot",
              248,
              "248",
              "arrow-right-open-dot",
              348,
              "348",
              "arrow-bar-up",
              49,
              "49",
              "arrow-bar-up-open",
              149,
              "149",
              "arrow-bar-up-dot",
              249,
              "249",
              "arrow-bar-up-open-dot",
              349,
              "349",
              "arrow-bar-down",
              50,
              "50",
              "arrow-bar-down-open",
              150,
              "150",
              "arrow-bar-down-dot",
              250,
              "250",
              "arrow-bar-down-open-dot",
              350,
              "350",
              "arrow-bar-left",
              51,
              "51",
              "arrow-bar-left-open",
              151,
              "151",
              "arrow-bar-left-dot",
              251,
              "251",
              "arrow-bar-left-open-dot",
              351,
              "351",
              "arrow-bar-right",
              52,
              "52",
              "arrow-bar-right-open",
              152,
              "152",
              "arrow-bar-right-dot",
              252,
              "252",
              "arrow-bar-right-open-dot",
              352,
              "352",
              "arrow",
              53,
              "53",
              "arrow-open",
              153,
              "153",
              "arrow-dot",
              253,
              "253",
              "arrow-open-dot",
              353,
              "353",
              "arrow-wide",
              54,
              "54",
              "arrow-wide-open",
              154,
              "154",
              "arrow-wide-dot",
              254,
              "254",
              "arrow-wide-open-dot",
              354,
              "354"
            ],
            "dflt": "circle",
            "arrayOk": true,
            "editType": "style",
            "description": "Marker symbol: a name (`'diamond-open'`), a Plotly numeric code, a custom symbol registered with `symbols.register` (with the same `-open` / `-dot` variants), a `'text:…'` glyph such as `'text:🚀'`, or one per point.",
            "valType": "enumerated"
          },
          "image": {
            "strict": true,
            "arrayOk": true,
            "editType": "style",
            "description": "Image sprites: a URL or data URI drawn instead of the symbol in a `size` × `size` square (keeping its aspect ratio), or one per point (empty entries keep the symbol). `opacity` applies; `color` and `line` do not. Cross-origin URLs need CORS headers.",
            "valType": "string"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "arrayOk": true,
            "editType": "style",
            "animatable": true,
            "description": "Marker opacity (multiplied by the trace `opacity`), or one per point. Default 1, 0.7 for bubbles.",
            "valType": "number"
          },
          "angle": {
            "dflt": 0,
            "arrayOk": true,
            "editType": "style",
            "description": "Marker rotation in degrees, clockwise, or one per point.",
            "valType": "angle"
          },
          "line": {
            "editType": "style",
            "description": "Marker outline.",
            "role": "object",
            "color": {
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline color, one per point, or numbers mapped through its `colorscale`.",
              "valType": "color"
            },
            "colorscale": {
              "editType": "style",
              "description": "Colorscale for numeric `marker.line.color` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
              "valType": "colorscale"
            },
            "autocolorscale": {
              "editType": "style",
              "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
              "valType": "boolean"
            },
            "reversescale": {
              "dflt": false,
              "editType": "style",
              "description": "Reverse the colorscale (the lowest value gets the last color).",
              "valType": "boolean"
            },
            "cauto": {
              "editType": "style",
              "description": "Compute the color domain from the numeric `marker.line.color` values. Defaults to false when both `cmin` and `cmax` are given.",
              "valType": "boolean"
            },
            "cmin": {
              "editType": "style",
              "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
              "valType": "number"
            },
            "cmax": {
              "editType": "style",
              "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
              "valType": "number"
            },
            "cmid": {
              "editType": "style",
              "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
              "valType": "number"
            },
            "coloraxis": {
              "dflt": "coloraxis",
              "editType": "style",
              "description": "Share a colorscale and domain with other traces through `layout.coloraxis` (`'coloraxis'`, `'coloraxis2'`, …). Overrides this container's colorscale attributes.",
              "valType": "subplotid"
            },
            "width": {
              "min": 0,
              "arrayOk": true,
              "editType": "style",
              "description": "Marker outline width in CSS px, or one per point. Default 0, 1 for bubbles.",
              "valType": "number"
            }
          }
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected points while a selection is active (box/lasso select in any cell, `selectedpoints`), in every cell.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected points.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Marker opacity of selected points.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Marker color of selected points.",
              "valType": "color"
            },
            "size": {
              "min": 0,
              "editType": "style",
              "description": "Marker size (px) of selected points.",
              "valType": "number"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected points while a selection is active (box/lasso select in any cell, `selectedpoints`), in every cell.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected points.",
            "role": "object",
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Marker opacity of unselected points. Default: 0.2 × the marker opacity when no selected/unselected opacity is set.",
              "valType": "number"
            },
            "color": {
              "editType": "style",
              "description": "Marker color of unselected points.",
              "valType": "color"
            },
            "size": {
              "min": 0,
              "editType": "style",
              "description": "Marker size (px) of unselected points.",
              "valType": "number"
            }
          }
        }
      }
    },
    "violin": {
      "categories": ["cartesian", "showLegend", "box-violin", "violinLayout"],
      "meta": {
        "description": "Violin plots: a Gaussian kernel density estimate of the samples at each position (Silverman bandwidth by default), mirrored or one-sided for split violins, with an optional inner box, mean line and jittered points.",
        "docsPage": "violin",
        "plotlyEquivalent": "violin"
      },
      "attributes": {
        "description": "Violin plot: a kernel density estimate of samples at each position, mirrored (or one-sided), with an optional inner box plot, mean line and points.",
        "role": "object",
        "type": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Trace type, e.g. `'scatter'`. Defaults to `'scatter'`.",
          "valType": "string"
        },
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "editType": "calc",
          "description": "Whether the trace is drawn. `legendonly` hides it but keeps its (toggleable) legend entry.",
          "valType": "enumerated"
        },
        "name": {
          "editType": "legend+plot",
          "description": "Trace name shown in the legend and hover labels. Defaults to `trace N`.",
          "valType": "string"
        },
        "uid": {
          "editType": "plot",
          "description": "Stable identity used to match traces across updates, so reordered traces are moved instead of rebuilt.",
          "valType": "string"
        },
        "showlegend": {
          "dflt": true,
          "editType": "legend+layout",
          "description": "Whether this trace has a legend entry.",
          "valType": "boolean"
        },
        "legend": {
          "dflt": "legend",
          "editType": "legend+layout",
          "description": "The legend this trace's item is shown in: `'legend'` (`layout.legend`), `'legend2'` (`layout.legend2`), ….",
          "valType": "subplotid"
        },
        "legendgroup": {
          "dflt": "",
          "editType": "legend",
          "description": "Traces in the same legend group toggle together.",
          "valType": "string"
        },
        "hovertext": {
          "arrayOk": true,
          "dflt": "",
          "editType": "style",
          "description": "Hover text per point; defaults to `text`.",
          "valType": "string"
        },
        "hoverinfo": {
          "flags": ["x", "y", "z", "text", "name"],
          "extras": ["all", "none", "skip"],
          "arrayOk": true,
          "editType": "none",
          "description": "Which fields hover labels show; `'skip'` also turns hover events off for this trace. Default `'all'`.",
          "valType": "flaglist"
        },
        "hovertemplate": {
          "arrayOk": true,
          "editType": "none",
          "description": "Template for hover labels, e.g. `'%{x}: %{y:.2f}<extra></extra>'` (d3-format / d3-time-format after `:` / `|`). Overrides `hoverinfo`.",
          "valType": "string"
        },
        "hoverlabel": {
          "editType": "none",
          "description": "Hover label style for this trace. Unset fields fall back to `layout.hoverlabel` (so there are no trace-level defaults).",
          "role": "object",
          "bgcolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label background. Default: the point color.",
            "valType": "color"
          },
          "bordercolor": {
            "arrayOk": true,
            "editType": "none",
            "description": "Label border. Default: contrasting with the background.",
            "valType": "color"
          },
          "font": {
            "editType": "none",
            "description": "Label font.",
            "role": "object",
            "family": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "arrayOk": true,
              "editType": "none",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "arrayOk": true,
              "editType": "none",
              "description": "Font color.",
              "valType": "color"
            }
          },
          "align": {
            "values": ["left", "right", "auto"],
            "arrayOk": true,
            "editType": "none",
            "description": "Text alignment inside labels.",
            "valType": "enumerated"
          },
          "namelength": {
            "min": -1,
            "arrayOk": true,
            "editType": "none",
            "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
            "valType": "integer"
          }
        },
        "selectedpoints": {
          "editType": "style",
          "description": "Indices of the selected points (set by box/lasso selection, or programmatically). `null` clears the selection.",
          "valType": "any"
        },
        "legendrank": {
          "dflt": 1000,
          "editType": "legend",
          "description": "Sort key for legend entries: lower ranks come first (top, or left). Ties keep trace order; traces default to 1000.",
          "valType": "number"
        },
        "legendwidth": {
          "min": 0,
          "editType": "legend",
          "description": "Width of this trace's item in horizontal legends, overriding `legend.entrywidth` (same units). Default: its text's.",
          "valType": "number"
        },
        "legendgrouptitle": {
          "editType": "legend",
          "description": "Title of the legend group this trace belongs to.",
          "role": "object",
          "text": {
            "dflt": "",
            "editType": "legend",
            "description": "Title heading this trace's legend group.",
            "valType": "string"
          },
          "font": {
            "editType": "legend",
            "description": "Group title font. Unset fields come from `legend.grouptitlefont`.",
            "role": "object",
            "family": {
              "editType": "legend",
              "description": "Font family.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "editType": "legend",
              "description": "Font size in px.",
              "valType": "number"
            },
            "color": {
              "editType": "legend",
              "description": "Font color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "editType": "legend",
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "editType": "legend",
              "description": "Font style.",
              "valType": "enumerated"
            }
          }
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "editType": "style",
          "animatable": true,
          "description": "Opacity of the whole trace.",
          "valType": "number"
        },
        "meta": {
          "arrayOk": true,
          "editType": "plot",
          "description": "Arbitrary user data, available in text templates as `%{meta}`.",
          "valType": "any"
        },
        "customdata": {
          "editType": "calc",
          "description": "Per-point user data, returned in events and available in hover templates.",
          "valType": "data_array"
        },
        "ids": {
          "editType": "calc",
          "description": "Per-point ids used to match points across animation frames.",
          "valType": "data_array"
        },
        "dataset": {
          "noBlank": true,
          "strict": true,
          "editType": "calc",
          "description": "Name of a figure-level dataset (`figure.datasets`). Data arrays, and per-point attributes whose values cannot start with `@` (such as colors and sizes), may then reference its columns as `'@column'`; on string attributes such as `text`, `'@…'` stays literal text.",
          "valType": "string"
        },
        "uirevision": {
          "editType": "none",
          "description": "While unchanged, user interaction state for this trace (legend visibility, selections) is kept across updates.",
          "valType": "any"
        },
        "styleRules": {
          "editType": "calc",
          "description": "Conditional per-point styling as JSON (plan E8.5): `[{ when: { y: { gt: 10 } }, set: { 'marker.color': 'gold' } }]`. `when` tests fields of the point (`'y'`, `'customdata[1]'`, `'pointNumber'`, …) with `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `between`, `regex`, `and`, `or` and `not`; `set` gives per-point (`arrayOk`) attributes a value on the matching points. Later rules win; other points keep the trace's own value.",
          "valType": "any"
        },
        "xaxis": {
          "dflt": "x",
          "editType": "calc",
          "description": "The x axis this trace is plotted against: `'x'` → `layout.xaxis`, `'x2'` → `layout.xaxis2`.",
          "valType": "subplotid"
        },
        "yaxis": {
          "dflt": "y",
          "editType": "calc",
          "description": "The y axis this trace is plotted against: `'y'` → `layout.yaxis`, `'y2'` → `layout.yaxis2`.",
          "valType": "subplotid"
        },
        "x": {
          "editType": "calc",
          "role": "data",
          "description": "x samples: the values of horizontal violines when `y` is not given, else the position of each sample (one violin per distinct x) for vertical violines.",
          "valType": "data_array"
        },
        "y": {
          "editType": "calc",
          "role": "data",
          "description": "y samples: the values of horizontal violines when `x` is not given, else the position of each sample (one violin per distinct y) for vertical violines.",
          "valType": "data_array"
        },
        "x0": {
          "editType": "calc",
          "description": "Position of the violin when `x` is not given. Default: the trace name on category axes (and numeric or date names on linear, log and date axes), else the violin's index among the violin traces.",
          "valType": "any"
        },
        "y0": {
          "editType": "calc",
          "description": "Position of the violin when `y` is not given. Default: the trace name on category axes (and numeric or date names on linear, log and date axes), else the violin's index among the violin traces.",
          "valType": "any"
        },
        "bandwidth": {
          "min": 0,
          "editType": "calc",
          "description": "Bandwidth of the Gaussian kernel density estimate, in value-axis units. Default: Silverman's rule, `1.059 · min(sd, IQR / 1.349) · n^(−1/5)` (at least 1% of the sample range).",
          "valType": "number"
        },
        "scalegroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Violins of traces with the same scale group are scaled together (by `scalemode`), so their widths compare. Default: the trace name, so each trace is scaled on its own. Violins scale together within a subplot.",
          "valType": "string"
        },
        "scalemode": {
          "values": ["width", "count"],
          "dflt": "width",
          "editType": "calc",
          "description": "`'width'`: the widest violin of the scale group fills its slot; `'count'`: widths are also proportional to each violin's sample count.",
          "valType": "enumerated"
        },
        "spanmode": {
          "values": ["soft", "hard", "manual"],
          "dflt": "soft",
          "editType": "calc",
          "description": "How far the density is drawn: `soft` two bandwidths past the extreme samples, `hard` exactly to them, `manual` over `span`. Default: `manual` when `span` is set.",
          "valType": "enumerated"
        },
        "span": {
          "items": [
            {
              "editType": "calc",
              "description": "Start of the span (value-axis data).",
              "valType": "any"
            },
            {
              "editType": "calc",
              "description": "End of the span (value-axis data).",
              "valType": "any"
            }
          ],
          "editType": "calc",
          "description": "The value range of the density with `spanmode: 'manual'`; a missing end falls back to the `soft` end.",
          "valType": "info_array"
        },
        "line": {
          "editType": "style",
          "description": "Outline of the violin.",
          "role": "object",
          "color": {
            "editType": "style",
            "description": "Outline color of the violin. Default: `marker.color`, else the colorway.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 2,
            "editType": "style",
            "description": "Outline width in CSS px.",
            "valType": "number"
          }
        },
        "fillcolor": {
          "editType": "style",
          "description": "Fill color of the violin. Default: `line.color` at half opacity.",
          "valType": "color"
        },
        "points": {
          "values": ["all", "outliers", "suspectedoutliers", false],
          "editType": "calc",
          "description": "Which samples are drawn as points: `'all'`, only those beyond the whiskers (`'outliers'`, the default), those plus a highlight of the ones between the whiskers and 3 IQR from the quartiles (`'suspectedoutliers'`, styled by `marker.outliercolor` and `marker.line.outlier*`), or none (`false`). Default: `'suspectedoutliers'` when an outlier color is set, else `'outliers'`.",
          "valType": "enumerated"
        },
        "jitter": {
          "min": 0,
          "max": 1,
          "editType": "calc",
          "description": "Random spread of the points across the position axis, as a fraction of the violin width (0: all on one line). Denser stretches spread more. Default: 0.3 with `points: 'all'`, else 0. The spread is repeatable (Plotly's seeded generator).",
          "valType": "number"
        },
        "pointpos": {
          "min": -2,
          "max": 2,
          "editType": "calc",
          "description": "Where the points sit relative to the violin, in violin half-widths: 0 on its center line, 1 on its right (or top) edge, −2 one violin width to the left (or below). Default: −1.5 with `points: 'all'`, else 0.",
          "valType": "number"
        },
        "orientation": {
          "values": ["v", "h"],
          "editType": "calc",
          "description": "`'v'`: vertical violines at `x` positions over `y` values; `'h'`: horizontal ones at `y` positions. Default: `'v'` when `y` is given, else `'h'`.",
          "valType": "enumerated"
        },
        "width": {
          "min": 0,
          "dflt": 0,
          "editType": "calc",
          "description": "Violin width in position-axis units (category slots, or ms on date axes). 0 (default): computed from the spacing of the positions and `layout.violingap`, `violingroupgap` and `violinmode`.",
          "valType": "number"
        },
        "offsetgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "With `layout.violinmode: 'group'`, traces with the same offset group share one slot at each position; different offset groups sit side by side.",
          "valType": "string"
        },
        "alignmentgroup": {
          "dflt": "",
          "editType": "calc",
          "description": "Traces on the same position axis with the same alignment group split each position between their offset groups; different alignment groups lay out independently.",
          "valType": "string"
        },
        "quartilemethod": {
          "values": ["linear", "exclusive", "inclusive"],
          "dflt": "linear",
          "editType": "calc",
          "description": "How quartiles are computed from samples: `linear` interpolates over the whole sample (Plotly's method, the one most tools call type 5); for odd counts, `exclusive` takes the medians of the lower and upper halves without the median, `inclusive` with it. Even counts use `linear` in every method.",
          "valType": "enumerated"
        },
        "marker": {
          "editType": "calc",
          "description": "Style of the sample points.",
          "role": "object",
          "outliercolor": {
            "dflt": "rgba(0, 0, 0, 0)",
            "editType": "style",
            "description": "Fill of suspected outliers (between the whiskers and 3 IQR from the quartiles) with `'suspectedoutliers'`. Setting it makes that mode the default.",
            "valType": "color"
          },
          "symbol": {
            "values": [
              "circle",
              0,
              "0",
              "circle-open",
              100,
              "100",
              "circle-dot",
              200,
              "200",
              "circle-open-dot",
              300,
              "300",
              "square",
              1,
              "1",
              "square-open",
              101,
              "101",
              "square-dot",
              201,
              "201",
              "square-open-dot",
              301,
              "301",
              "diamond",
              2,
              "2",
              "diamond-open",
              102,
              "102",
              "diamond-dot",
              202,
              "202",
              "diamond-open-dot",
              302,
              "302",
              "cross",
              3,
              "3",
              "cross-open",
              103,
              "103",
              "cross-dot",
              203,
              "203",
              "cross-open-dot",
              303,
              "303",
              "x",
              4,
              "4",
              "x-open",
              104,
              "104",
              "x-dot",
              204,
              "204",
              "x-open-dot",
              304,
              "304",
              "triangle-up",
              5,
              "5",
              "triangle-up-open",
              105,
              "105",
              "triangle-up-dot",
              205,
              "205",
              "triangle-up-open-dot",
              305,
              "305",
              "triangle-down",
              6,
              "6",
              "triangle-down-open",
              106,
              "106",
              "triangle-down-dot",
              206,
              "206",
              "triangle-down-open-dot",
              306,
              "306",
              "triangle-left",
              7,
              "7",
              "triangle-left-open",
              107,
              "107",
              "triangle-left-dot",
              207,
              "207",
              "triangle-left-open-dot",
              307,
              "307",
              "triangle-right",
              8,
              "8",
              "triangle-right-open",
              108,
              "108",
              "triangle-right-dot",
              208,
              "208",
              "triangle-right-open-dot",
              308,
              "308",
              "triangle-ne",
              9,
              "9",
              "triangle-ne-open",
              109,
              "109",
              "triangle-ne-dot",
              209,
              "209",
              "triangle-ne-open-dot",
              309,
              "309",
              "triangle-se",
              10,
              "10",
              "triangle-se-open",
              110,
              "110",
              "triangle-se-dot",
              210,
              "210",
              "triangle-se-open-dot",
              310,
              "310",
              "triangle-sw",
              11,
              "11",
              "triangle-sw-open",
              111,
              "111",
              "triangle-sw-dot",
              211,
              "211",
              "triangle-sw-open-dot",
              311,
              "311",
              "triangle-nw",
              12,
              "12",
              "triangle-nw-open",
              112,
              "112",
              "triangle-nw-dot",
              212,
              "212",
              "triangle-nw-open-dot",
              312,
              "312",
              "pentagon",
              13,
              "13",
              "pentagon-open",
              113,
              "113",
              "pentagon-dot",
              213,
              "213",
              "pentagon-open-dot",
              313,
              "313",
              "hexagon",
              14,
              "14",
              "hexagon-open",
              114,
              "114",
              "hexagon-dot",
              214,
              "214",
              "hexagon-open-dot",
              314,
              "314",
              "hexagon2",
              15,
              "15",
              "hexagon2-open",
              115,
              "115",
              "hexagon2-dot",
              215,
              "215",
              "hexagon2-open-dot",
              315,
              "315",
              "octagon",
              16,
              "16",
              "octagon-open",
              116,
              "116",
              "octagon-dot",
              216,
              "216",
              "octagon-open-dot",
              316,
              "316",
              "star",
              17,
              "17",
              "star-open",
              117,
              "117",
              "star-dot",
              217,
              "217",
              "star-open-dot",
              317,
              "317",
              "hexagram",
              18,
              "18",
              "hexagram-open",
              118,
              "118",
              "hexagram-dot",
              218,
              "218",
              "hexagram-open-dot",
              318,
              "318",
              "star-triangle-up",
              19,
              "19",
              "star-triangle-up-open",
              119,
              "119",
              "star-triangle-up-dot",
              219,
              "219",
              "star-triangle-up-open-dot",
              319,
              "319",
              "star-triangle-down",
              20,
              "20",
              "star-triangle-down-open",
              120,
              "120",
              "star-triangle-down-dot",
              220,
              "220",
              "star-triangle-down-open-dot",
              320,
              "320",
              "star-square",
              21,
              "21",
              "star-square-open",
              121,
              "121",
              "star-square-dot",
              221,
              "221",
              "star-square-open-dot",
              321,
              "321",
              "star-diamond",
              22,
              "22",
              "star-diamond-open",
              122,
              "122",
              "star-diamond-dot",
              222,
              "222",
              "star-diamond-open-dot",
              322,
              "322",
              "diamond-tall",
              23,
              "23",
              "diamond-tall-open",
              123,
              "123",
              "diamond-tall-dot",
              223,
              "223",
              "diamond-tall-open-dot",
              323,
              "323",
              "diamond-wide",
              24,
              "24",
              "diamond-wide-open",
              124,
              "124",
              "diamond-wide-dot",
              224,
              "224",
              "diamond-wide-open-dot",
              324,
              "324",
              "hourglass",
              25,
              "25",
              "hourglass-open",
              125,
              "125",
              "hourglass-dot",
              225,
              "225",
              "hourglass-open-dot",
              325,
              "325",
              "bowtie",
              26,
              "26",
              "bowtie-open",
              126,
              "126",
              "bowtie-dot",
              226,
              "226",
              "bowtie-open-dot",
              326,
              "326",
              "circle-cross",
              27,
              "27",
              "circle-cross-open",
              127,
              "127",
              "circle-cross-dot",
              227,
              "227",
              "circle-cross-open-dot",
              327,
              "327",
              "circle-x",
              28,
              "28",
              "circle-x-open",
              128,
              "128",
              "circle-x-dot",
              228,
              "228",
              "circle-x-open-dot",
              328,
              "328",
              "square-cross",
              29,
              "29",
              "square-cross-open",
              129,
              "129",
              "square-cross-dot",
              229,
              "229",
              "square-cross-open-dot",
              329,
              "329",
              "square-x",
              30,
              "30",
              "square-x-open",
              130,
              "130",
              "square-x-dot",
              230,
              "230",
              "square-x-open-dot",
              330,
              "330",
              "diamond-cross",
              31,
              "31",
              "diamond-cross-open",
              131,
              "131",
              "diamond-cross-dot",
              231,
              "231",
              "diamond-cross-open-dot",
              331,
              "331",
              "diamond-x",
              32,
              "32",
              "diamond-x-open",
              132,
              "132",
              "diamond-x-dot",
              232,
              "232",
              "diamond-x-open-dot",
              332,
              "332",
              "cross-thin",
              33,
              "33",
              "cross-thin-open",
              133,
              "133",
              "cross-thin-dot",
              233,
              "233",
              "cross-thin-open-dot",
              333,
              "333",
              "x-thin",
              34,
              "34",
              "x-thin-open",
              134,
              "134",
              "x-thin-dot",
              234,
              "234",
              "x-thin-open-dot",
              334,
              "334",
              "asterisk",
              35,
              "35",
              "asterisk-open",
              135,
              "135",
              "asterisk-dot",
              235,
              "235",
              "asterisk-open-dot",
              335,
              "335",
              "hash",
              36,
              "36",
              "hash-open",
              136,
              "136",
              "hash-dot",
              236,
              "236",
              "hash-open-dot",
              336,
              "336",
              "y-up",
              37,
              "37",
              "y-up-open",
              137,
              "137",
              "y-up-dot",
              237,
              "237",
              "y-up-open-dot",
              337,
              "337",
              "y-down",
              38,
              "38",
              "y-down-open",
              138,
              "138",
              "y-down-dot",
              238,
              "238",
              "y-down-open-dot",
              338,
              "338",
              "y-left",
              39,
              "39",
              "y-left-open",
              139,
              "139",
              "y-left-dot",
              239,
              "239",
              "y-left-open-dot",
              339,
              "339",
              "y-right",
              40,
              "40",
              "y-right-open",
              140,
              "140",
              "y-right-dot",
              240,
              "240",
              "y-right-open-dot",
              340,
              "340",
              "line-ew",
              41,
              "41",
              "line-ew-open",
              141,
              "141",
              "line-ew-dot",
              241,
              "241",
              "line-ew-open-dot",
              341,
              "341",
              "line-ns",
              42,
              "42",
              "line-ns-open",
              142,
              "142",
              "line-ns-dot",
              242,
              "242",
              "line-ns-open-dot",
              342,
              "342",
              "line-ne",
              43,
              "43",
              "line-ne-open",
              143,
              "143",
              "line-ne-dot",
              243,
              "243",
              "line-ne-open-dot",
              343,
              "343",
              "line-nw",
              44,
              "44",
              "line-nw-open",
              144,
              "144",
              "line-nw-dot",
              244,
              "244",
              "line-nw-open-dot",
              344,
              "344",
              "arrow-up",
              45,
              "45",
              "arrow-up-open",
              145,
              "145",
              "arrow-up-dot",
              245,
              "245",
              "arrow-up-open-dot",
              345,
              "345",
              "arrow-down",
              46,
              "46",
              "arrow-down-open",
              146,
              "146",
              "arrow-down-dot",
              246,
              "246",
              "arrow-down-open-dot",
              346,
              "346",
              "arrow-left",
              47,
              "47",
              "arrow-left-open",
              147,
              "147",
              "arrow-left-dot",
              247,
              "247",
              "arrow-left-open-dot",
              347,
              "347",
              "arrow-right",
              48,
              "48",
              "arrow-right-open",
              148,
              "148",
              "arrow-right-dot",
              248,
              "248",
              "arrow-right-open-dot",
              348,
              "348",
              "arrow-bar-up",
              49,
              "49",
              "arrow-bar-up-open",
              149,
              "149",
              "arrow-bar-up-dot",
              249,
              "249",
              "arrow-bar-up-open-dot",
              349,
              "349",
              "arrow-bar-down",
              50,
              "50",
              "arrow-bar-down-open",
              150,
              "150",
              "arrow-bar-down-dot",
              250,
              "250",
              "arrow-bar-down-open-dot",
              350,
              "350",
              "arrow-bar-left",
              51,
              "51",
              "arrow-bar-left-open",
              151,
              "151",
              "arrow-bar-left-dot",
              251,
              "251",
              "arrow-bar-left-open-dot",
              351,
              "351",
              "arrow-bar-right",
              52,
              "52",
              "arrow-bar-right-open",
              152,
              "152",
              "arrow-bar-right-dot",
              252,
              "252",
              "arrow-bar-right-open-dot",
              352,
              "352",
              "arrow",
              53,
              "53",
              "arrow-open",
              153,
              "153",
              "arrow-dot",
              253,
              "253",
              "arrow-open-dot",
              353,
              "353",
              "arrow-wide",
              54,
              "54",
              "arrow-wide-open",
              154,
              "154",
              "arrow-wide-dot",
              254,
              "254",
              "arrow-wide-open-dot",
              354,
              "354"
            ],
            "dflt": "circle",
            "editType": "style",
            "description": "Point symbol: a name (`'diamond-open'`), a Plotly numeric code, a registered custom symbol or a `'text:…'` glyph.",
            "valType": "enumerated"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "editType": "style",
            "description": "Point opacity (multiplied by the trace `opacity`).",
            "valType": "number"
          },
          "angle": {
            "dflt": 0,
            "editType": "style",
            "description": "Point rotation in degrees, clockwise.",
            "valType": "angle"
          },
          "size": {
            "min": 0,
            "dflt": 6,
            "editType": "calc",
            "description": "Point diameter in CSS px.",
            "valType": "number"
          },
          "color": {
            "editType": "style",
            "description": "Point fill color. Default: `line.color`.",
            "valType": "color"
          },
          "line": {
            "editType": "style",
            "description": "Point outlines.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "editType": "style",
              "description": "Point outline color.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 0,
              "editType": "style",
              "description": "Point outline width in CSS px.",
              "valType": "number"
            },
            "outliercolor": {
              "editType": "style",
              "description": "Outline color of suspected outliers with `'suspectedoutliers'`. Default: `marker.color`. Setting it makes that mode the default.",
              "valType": "color"
            },
            "outlierwidth": {
              "min": 0,
              "dflt": 1,
              "editType": "style",
              "description": "Outline width (px) of suspected outliers with `'suspectedoutliers'`.",
              "valType": "number"
            }
          }
        },
        "text": {
          "arrayOk": true,
          "dflt": "",
          "editType": "calc",
          "description": "Text per sample, shown in the hover label of its point.",
          "valType": "string"
        },
        "zorder": {
          "dflt": 0,
          "editType": "plot",
          "description": "Stacking order among the traces of a subplot: higher is drawn on top. At equal `zorder`, violins draw below boxes and both below scatter traces (Plotly’s layer order), then in trace order.",
          "valType": "integer"
        },
        "box": {
          "editType": "plot",
          "description": "The box plot drawn inside the violin.",
          "role": "object",
          "visible": {
            "editType": "plot",
            "description": "Draw a box plot inside the violin. Default: true when any other `box` attribute is set.",
            "valType": "boolean"
          },
          "width": {
            "min": 0,
            "max": 1,
            "dflt": 0.25,
            "editType": "plot",
            "description": "Width of the inner box as a fraction of the violin width.",
            "valType": "number"
          },
          "fillcolor": {
            "editType": "style",
            "description": "Fill of the inner box. Default: the violin `fillcolor`.",
            "valType": "color"
          },
          "line": {
            "editType": "style",
            "description": "Outline of the inner box.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Outline color of the inner box. Default: `line.color`.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "editType": "style",
              "description": "Outline width (px) of the inner box. Default: `line.width`.",
              "valType": "number"
            }
          }
        },
        "meanline": {
          "editType": "plot",
          "description": "The mean line.",
          "role": "object",
          "visible": {
            "editType": "plot",
            "description": "Draw a dashed line at the sample mean: across the inner box when it is shown, else across the violin. Default: true when `meanline.color` or `width` is set.",
            "valType": "boolean"
          },
          "color": {
            "editType": "style",
            "description": "Mean line color. Default: `line.color`.",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "editType": "style",
            "description": "Mean line width (px). Default: `line.width`.",
            "valType": "number"
          }
        },
        "side": {
          "values": ["both", "positive", "negative"],
          "dflt": "both",
          "editType": "calc",
          "description": "Which half of the violin is drawn: `both`, only the `positive` side (right of, or above, the position) or the `negative` one. Two traces at the same positions with opposite sides make split violins.",
          "valType": "enumerated"
        },
        "selected": {
          "editType": "style",
          "description": "Style of selected points while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of selected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Color of selected points.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of selected points.",
              "valType": "number"
            }
          }
        },
        "unselected": {
          "editType": "style",
          "description": "Style of unselected points while a selection is active.",
          "role": "object",
          "marker": {
            "editType": "style",
            "description": "Marker style of unselected points.",
            "role": "object",
            "color": {
              "editType": "style",
              "description": "Color of unselected points.",
              "valType": "color"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "editType": "style",
              "description": "Opacity of unselected points. Default: 0.2 × the marker opacity.",
              "valType": "number"
            }
          }
        },
        "hoveron": {
          "flags": ["violins", "points", "kde"],
          "extras": ["all"],
          "dflt": "violins+points+kde",
          "editType": "style",
          "description": "What shows hover labels: the violins (one label per statistic), the points, and the density at the pointer (`kde`, a label on the violin edge; its value is relative to the scale group’s peak).",
          "valType": "flaglist"
        }
      }
    }
  },
  "layout": {
    "attributes": {
      "editType": "calc",
      "description": "Figure layout.",
      "role": "object",
      "width": {
        "min": 10,
        "dflt": 700,
        "editType": "layout",
        "description": "Figure width in CSS pixels. Ignored when `autosize` fills the container.",
        "valType": "number"
      },
      "height": {
        "min": 10,
        "dflt": 450,
        "editType": "layout",
        "description": "Figure height in CSS pixels. Ignored when `autosize` fills the container.",
        "valType": "number"
      },
      "autosize": {
        "dflt": false,
        "editType": "layout",
        "description": "Size the figure to its container on first render (and on resize with `config.responsive`).",
        "valType": "boolean"
      },
      "margin": {
        "editType": "layout",
        "description": "Space around the plot area.",
        "role": "object",
        "l": {
          "min": 0,
          "dflt": 80,
          "description": "Left margin in CSS pixels.",
          "valType": "number"
        },
        "r": {
          "min": 0,
          "dflt": 80,
          "description": "Right margin in CSS pixels.",
          "valType": "number"
        },
        "t": {
          "min": 0,
          "dflt": 100,
          "description": "Top margin in CSS pixels.",
          "valType": "number"
        },
        "b": {
          "min": 0,
          "dflt": 80,
          "description": "Bottom margin in CSS pixels.",
          "valType": "number"
        },
        "pad": {
          "min": 0,
          "dflt": 0,
          "description": "Padding between the plot area and the axis lines, in CSS pixels.",
          "valType": "number"
        },
        "autoexpand": {
          "dflt": true,
          "description": "Let components (legend, colorbars, automargin axes) grow the margins.",
          "valType": "boolean"
        },
        "gutter": {
          "min": 0,
          "dflt": 0,
          "description": "Holochart extension: space (CSS px) kept between the figure edge and content that grows a margin (automargin tick labels and axis titles, legends, colorbars), so it never touches the edge. 0 (Plotly) lets that content reach the edge.",
          "valType": "number"
        }
      },
      "paper_bgcolor": {
        "dflt": "#fff",
        "editType": "style",
        "description": "Background color of the whole figure.",
        "valType": "color"
      },
      "plot_bgcolor": {
        "dflt": "#fff",
        "editType": "style",
        "description": "Background color of the plot area between the axes.",
        "valType": "color"
      },
      "font": {
        "editType": "layout+plot",
        "description": "Global font. Every text element inherits unset font fields from here.",
        "role": "object",
        "family": {
          "noBlank": true,
          "strict": true,
          "dflt": "\"Open Sans\", verdana, arial, sans-serif",
          "description": "CSS font-family list used by every text element unless overridden.",
          "valType": "string"
        },
        "size": {
          "min": 1,
          "dflt": 12,
          "description": "Base font size in CSS pixels.",
          "valType": "number"
        },
        "color": {
          "dflt": "#444",
          "editType": "style",
          "description": "Base text color.",
          "valType": "color"
        },
        "weight": {
          "min": 1,
          "max": 1000,
          "extras": ["normal", "bold"],
          "dflt": "normal",
          "description": "Base font weight.",
          "valType": "integer"
        },
        "style": {
          "values": ["normal", "italic"],
          "dflt": "normal",
          "description": "Base font style.",
          "valType": "enumerated"
        },
        "variant": {
          "values": [
            "normal",
            "small-caps",
            "all-small-caps",
            "all-petite-caps",
            "petite-caps",
            "unicase"
          ],
          "dflt": "normal",
          "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
          "valType": "enumerated"
        },
        "textcase": {
          "values": ["normal", "word caps", "upper", "lower"],
          "dflt": "normal",
          "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
          "valType": "enumerated"
        },
        "lineposition": {
          "flags": ["under", "over", "through"],
          "extras": ["none"],
          "dflt": "none",
          "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
          "valType": "flaglist"
        },
        "shadow": {
          "dflt": "none",
          "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
          "valType": "string"
        }
      },
      "colorway": {
        "dflt": [
          "#1f77b4",
          "#ff7f0e",
          "#2ca02c",
          "#d62728",
          "#9467bd",
          "#8c564b",
          "#e377c2",
          "#7f7f7f",
          "#bcbd22",
          "#17becf"
        ],
        "editType": "style+legend",
        "description": "Default trace colors, cycled by trace index. A registered colorway's name works too, e.g. `'Safe'` (colorblind-safe, always available; Holochart only).",
        "valType": "colorlist"
      },
      "template": {
        "editType": "calc",
        "description": "Template: a registered name (`'dark'`), a `+`-composition (`'dark+presentation'`) or an object `{ layout, data }`. `null` disables the default template.",
        "valType": "any"
      },
      "title": {
        "editType": "layout+plot",
        "description": "Figure title.",
        "role": "object",
        "text": {
          "dflt": "",
          "description": "Title text (supports rich-text tags, E2.10).",
          "valType": "string"
        },
        "font": {
          "description": "Title font. Defaults to `layout.font` with 1.4× size.",
          "editType": "layout+plot",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "description": "Font size in CSS pixels.",
            "valType": "number"
          },
          "color": {
            "description": "Text color.",
            "editType": "style",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "description": "Font style.",
            "valType": "enumerated"
          },
          "variant": {
            "values": [
              "normal",
              "small-caps",
              "all-small-caps",
              "all-petite-caps",
              "petite-caps",
              "unicase"
            ],
            "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
            "valType": "enumerated"
          },
          "textcase": {
            "values": ["normal", "word caps", "upper", "lower"],
            "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
            "valType": "enumerated"
          },
          "lineposition": {
            "flags": ["under", "over", "through"],
            "extras": ["none"],
            "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
            "valType": "flaglist"
          },
          "shadow": {
            "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
            "valType": "string"
          }
        },
        "x": {
          "min": 0,
          "max": 1,
          "dflt": 0.5,
          "description": "Horizontal position in `xref` coordinates.",
          "valType": "number"
        },
        "y": {
          "min": 0,
          "max": 1,
          "extras": ["auto"],
          "dflt": "auto",
          "description": "Vertical position in `yref` coordinates. `auto` places it in the top margin.",
          "valType": "number"
        },
        "xref": {
          "values": ["container", "paper"],
          "dflt": "container",
          "description": "`container` spans the whole figure; `paper` spans the plot area.",
          "valType": "enumerated"
        },
        "yref": {
          "values": ["container", "paper"],
          "dflt": "container",
          "description": "`container` spans the whole figure; `paper` spans the plot area.",
          "valType": "enumerated"
        },
        "xanchor": {
          "values": ["auto", "left", "center", "right"],
          "dflt": "auto",
          "description": "Horizontal alignment of the title box relative to `x`.",
          "valType": "enumerated"
        },
        "yanchor": {
          "values": ["auto", "top", "middle", "bottom"],
          "dflt": "auto",
          "description": "Vertical alignment of the title box relative to `y`.",
          "valType": "enumerated"
        },
        "subtitle": {
          "editType": "layout+plot",
          "description": "Subtitle.",
          "role": "object",
          "text": {
            "dflt": "",
            "description": "Subtitle text, drawn below the title.",
            "valType": "string"
          },
          "font": {
            "description": "Subtitle font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          }
        },
        "pad": {
          "editType": "layout+plot",
          "description": "Padding between the title and its anchor, applied on the anchored side only.",
          "role": "object",
          "t": {
            "dflt": 0,
            "description": "Padding above the title, px (`yanchor: top`).",
            "valType": "number"
          },
          "r": {
            "dflt": 0,
            "description": "Padding right of the title, px (`xanchor: right`).",
            "valType": "number"
          },
          "b": {
            "dflt": 0,
            "description": "Padding below the title, px (`yanchor: bottom`).",
            "valType": "number"
          },
          "l": {
            "dflt": 0,
            "description": "Padding left of the title, px (`xanchor: left`).",
            "valType": "number"
          }
        },
        "automargin": {
          "dflt": false,
          "description": "Grow the top margin so the title (and subtitle) fit. With `yref: paper` the title then sits right above the plot area.",
          "valType": "boolean"
        }
      },
      "showlegend": {
        "editType": "legend+layout",
        "description": "Show the legend. Defaults to `true` when more than one trace has a legend entry.",
        "valType": "boolean"
      },
      "uniformtext": {
        "editType": "plot",
        "description": "Uniform text sizing for bar and pie labels (E4.6).",
        "role": "object",
        "mode": {
          "values": [false, "hide", "show"],
          "dflt": false,
          "description": "Uniform size for the text inside bars and pie slices, per trace type (E4.6): labels are drawn at the smallest fitted size; `hide` drops labels that would be smaller than `minsize`, `show` draws them at the uniform size. `false` lets every label scale on its own.",
          "valType": "enumerated"
        },
        "minsize": {
          "min": 0,
          "dflt": 0,
          "description": "Minimum text size in px for `uniformtext.mode`. Also raises trace fonts smaller than it.",
          "valType": "number"
        }
      },
      "hovermode": {
        "values": ["x", "y", "closest", false, "x unified", "y unified"],
        "dflt": "closest",
        "editType": "modebar",
        "description": "How hover picks points: nearest point, all points at the same x/y, or unified labels.",
        "valType": "enumerated"
      },
      "dragmode": {
        "values": [
          "zoom",
          "pan",
          "select",
          "lasso",
          "drawclosedpath",
          "drawopenpath",
          "drawline",
          "drawrect",
          "drawcircle",
          "orbit",
          "turntable",
          false
        ],
        "dflt": "zoom",
        "editType": "modebar",
        "description": "What dragging on the plot area does: zoom, pan, box or lasso select, or draw a new shape (`draw*`, styled by `newshape`).",
        "valType": "enumerated"
      },
      "transition": {
        "editType": "none",
        "description": "Default transition for animated updates (E7.3).",
        "role": "object",
        "duration": {
          "min": 0,
          "dflt": 500,
          "description": "Transition duration in milliseconds.",
          "valType": "number"
        },
        "easing": {
          "values": [
            "linear",
            "quad",
            "cubic",
            "sin",
            "exp",
            "circle",
            "elastic",
            "back",
            "bounce",
            "linear-in",
            "quad-in",
            "cubic-in",
            "sin-in",
            "exp-in",
            "circle-in",
            "elastic-in",
            "back-in",
            "bounce-in",
            "linear-out",
            "quad-out",
            "cubic-out",
            "sin-out",
            "exp-out",
            "circle-out",
            "elastic-out",
            "back-out",
            "bounce-out",
            "linear-in-out",
            "quad-in-out",
            "cubic-in-out",
            "sin-in-out",
            "exp-in-out",
            "circle-in-out",
            "elastic-in-out",
            "back-in-out",
            "bounce-in-out"
          ],
          "dflt": "cubic-in-out",
          "description": "Easing function.",
          "valType": "enumerated"
        },
        "ordering": {
          "values": ["layout first", "traces first"],
          "dflt": "layout first",
          "description": "Whether layout or trace changes animate first.",
          "valType": "enumerated"
        }
      },
      "uirevision": {
        "editType": "none",
        "description": "While unchanged across updates, user interaction state (zoom, legend toggles, selections) is preserved.",
        "valType": "any"
      },
      "datarevision": {
        "editType": "calc",
        "description": "Change this to force data arrays to be re-read when they are mutated in place.",
        "valType": "any"
      },
      "separators": {
        "noBlank": true,
        "editType": "plot",
        "description": "Decimal then thousands separator of numbers, e.g. `', '` for `1 234,5`. Default: the locale's (`config.locale`), `'.,'` in English.",
        "valType": "string"
      },
      "meta": {
        "arrayOk": true,
        "editType": "plot",
        "description": "Arbitrary user data, available in text templates as `%{meta}`.",
        "valType": "any"
      },
      "grid": {
        "editType": "calc",
        "description": "A grid of subplots (Plotly `layout.grid`). Cartesian axes placed in the grid get their `domain`, `anchor`, `side` and `position` defaults from their cell; domain traces (pie, …) are placed with `domain.row` / `domain.column`. Values given on an axis or a trace always win.",
        "role": "object",
        "rows": {
          "min": 1,
          "max": 100,
          "description": "Number of rows. Defaults to the length of `subplots` or `yaxes`. A grid needs more than one cell (`rows * columns > 1`); otherwise it is ignored.",
          "valType": "integer"
        },
        "roworder": {
          "values": ["top to bottom", "bottom to top"],
          "dflt": "top to bottom",
          "description": "Whether row 0 (of `subplots`, `yaxes` and trace `domain.row`) is the top row or the bottom row.",
          "valType": "enumerated"
        },
        "columns": {
          "min": 1,
          "max": 100,
          "description": "Number of columns. Defaults to the length of `subplots[0]` or `xaxes`.",
          "valType": "integer"
        },
        "subplots": {
          "items": {
            "items": {
              "dflt": "",
              "valType": "string"
            },
            "dflt": [],
            "valType": "info_array"
          },
          "description": "The cartesian subplot of each cell, as a 2D array `[row][column]` of ids like `'xy'` or `'x2y3'`, or `''` for an empty cell. All cells of a column must share one x axis and all cells of a row one y axis; a subplot that breaks this, or that no trace or axis creates, leaves its cell empty. Takes precedence over `xaxes`/`yaxes`. With `pattern: 'independent'` and no arrays, it defaults to `'xy'`, `'x2y2'`, … in row-major order.",
          "valType": "info_array"
        },
        "xaxes": {
          "items": {
            "dflt": "",
            "valType": "string"
          },
          "description": "The x axis of each column (`'x'`, `'x2'`, …, or `''` for none), used when there is no `subplots` array. Defaults to `'x'`, `'x2'`, … for `pattern: 'coupled'`.",
          "valType": "info_array"
        },
        "yaxes": {
          "items": {
            "dflt": "",
            "valType": "string"
          },
          "description": "The y axis of each row (`'y'`, `'y2'`, …, or `''` for none), used when there is no `subplots` array. Defaults to `'y'`, `'y2'`, … for `pattern: 'coupled'`.",
          "valType": "info_array"
        },
        "pattern": {
          "values": ["independent", "coupled"],
          "dflt": "coupled",
          "description": "Default cell contents when neither `subplots` nor `xaxes`/`yaxes` is given: `coupled` shares one x axis per column and one y axis per row (`xaxes: ['x', 'x2', …]`, `yaxes: ['y', 'y2', …]`); `independent` gives every cell its own pair (`'xy'`, `'x2y2'`, … in row-major order).",
          "valType": "enumerated"
        },
        "xgap": {
          "min": 0,
          "max": 1,
          "description": "Horizontal space between columns, as a fraction of a column width. Defaults to 0.2 for a grid of independent subplots (`subplots` or `pattern: independent`), 0.1 otherwise.",
          "valType": "number"
        },
        "ygap": {
          "min": 0,
          "max": 1,
          "description": "Vertical space between rows, as a fraction of a row height. Defaults to 0.3 for a grid of independent subplots (`subplots` or `pattern: independent`), 0.1 otherwise.",
          "valType": "number"
        },
        "domain": {
          "description": "The part of the plot area the grid fills.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "dflt": 0,
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "dflt": 1,
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "description": "Horizontal extent `[start, end]` of the whole grid, as fractions of the plot area. An empty or reversed extent falls back to `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "dflt": 0,
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "dflt": 1,
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "description": "Vertical extent `[start, end]` of the whole grid, as fractions of the plot area (from the bottom). An empty or reversed extent falls back to `[0, 1]`.",
            "valType": "info_array"
          }
        },
        "xside": {
          "values": ["bottom", "bottom plot", "top plot", "top"],
          "dflt": "bottom plot",
          "description": "Where the x axes are drawn by default: `bottom plot` / `top plot` against the bottom-most / top-most subplot of their column; `bottom` / `top` at the bottom / top edge of the grid (`anchor: 'free'`), even when that cell is empty.",
          "valType": "enumerated"
        },
        "yside": {
          "values": ["left", "left plot", "right plot", "right"],
          "dflt": "left plot",
          "description": "Where the y axes are drawn by default: `left plot` / `right plot` against the left-most / right-most subplot of their row; `left` / `right` at the left / right edge of the grid (`anchor: 'free'`), even when that cell is empty.",
          "valType": "enumerated"
        }
      },
      "xaxis": {
        "editType": "calc",
        "description": "A x axis. `xaxis2`, `xaxis3`, … declare further x axes, referenced from traces as `'x2'`, `'x3'`, ….",
        "role": "object",
        "subplot": "x",
        "visible": {
          "dflt": true,
          "editType": "layout+ticks+plot",
          "description": "Draw the axis (line, ticks, labels, grid and title). A hidden axis still maps data to pixels.",
          "valType": "boolean"
        },
        "color": {
          "dflt": "#444",
          "editType": "ticks",
          "description": "Base color of the axis: the default for `linecolor`, `tickcolor`, `zerolinecolor`, `dividercolor` and (when changed) the tick-label and title font colors.",
          "valType": "color"
        },
        "type": {
          "values": ["-", "linear", "log", "date", "category", "multicategory"],
          "dflt": "-",
          "editType": "calc",
          "description": "Axis type. `'-'` detects the type from the data of the first trace on this axis (Plotly's rules: mostly dates → `date`; more than twice as many distinct strings as numbers → `category`; two-level `[[groups], [items]]` arrays → `multicategory`; otherwise `linear`).",
          "valType": "enumerated"
        },
        "autotypenumbers": {
          "values": ["convert types", "strict"],
          "dflt": "convert types",
          "editType": "calc",
          "description": "How type detection treats numeric strings: `convert types` counts `'12'` as a number; `strict` counts only real numbers, so numeric strings make a `category` axis.",
          "valType": "enumerated"
        },
        "autorange": {
          "values": [true, false, "reversed", "min reversed", "max reversed", "min", "max"],
          "dflt": true,
          "editType": "layout+ticks+plot",
          "description": "Whether the range is computed from the data. `reversed` autoranges with the axis flipped. `min`/`max` autorange only that end and take the other from `range` (`min reversed`/`max reversed` also flip the axis). Defaults to `false` when a full `range` is given, to `min`/`max` when one end of `range` is `null`, and to `reversed` on a y axis only `image` traces use (row 0 at the top, as in Plotly).",
          "valType": "enumerated"
        },
        "autorangeoptions": {
          "editType": "layout+ticks+plot",
          "description": "Constraints applied to the computed autorange.",
          "role": "object",
          "minallowed": {
            "description": "The autoranged minimum is exactly this value (data units).",
            "valType": "any"
          },
          "maxallowed": {
            "description": "The autoranged maximum is exactly this value (data units).",
            "valType": "any"
          },
          "clipmin": {
            "description": "The autoranged minimum is at least this value (data units).",
            "valType": "any"
          },
          "clipmax": {
            "description": "The autoranged maximum is at most this value (data units).",
            "valType": "any"
          },
          "include": {
            "arrayOk": true,
            "description": "Value(s) the autorange must include (data units).",
            "valType": "any"
          }
        },
        "rangemode": {
          "values": ["normal", "tozero", "nonnegative"],
          "dflt": "normal",
          "editType": "layout+ticks+plot",
          "description": "Linear axes only. `tozero` extends the autorange to include 0; `nonnegative` keeps it ≥ 0.",
          "valType": "enumerated"
        },
        "fixedrange": {
          "dflt": false,
          "editType": "none",
          "description": "Disables zoom and pan on this axis (drag, scroll, and modebar zoom leave its range alone).",
          "valType": "boolean"
        },
        "range": {
          "items": [
            {
              "dflt": null,
              "valType": "any"
            },
            {
              "dflt": null,
              "valType": "any"
            }
          ],
          "editType": "ticks+plot",
          "animatable": true,
          "description": "Visible range `[start, end]` in data units (numbers, dates or category names; exponents on log axes, as in Plotly). Setting it turns `autorange` off; `null` for one end autoranges that end only.",
          "valType": "info_array"
        },
        "minallowed": {
          "editType": "plot",
          "description": "Lowest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
          "valType": "any"
        },
        "maxallowed": {
          "editType": "plot",
          "description": "Highest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
          "valType": "any"
        },
        "rangebreaks": {
          "editType": "calc",
          "description": "Spans hidden from the axis (plan E3.8): the axis skips them, so a weekday-only stock chart has no gaps for weekends or nights. Date and linear axes; data inside a break is not drawn. Ticks never land in a break; hover, zoom and pan work across breaks.",
          "itemName": "rangebreak",
          "role": "items",
          "items": {
            "role": "object",
            "enabled": {
              "dflt": true,
              "description": "Whether this range break is applied.",
              "valType": "boolean"
            },
            "visible": {
              "dflt": true,
              "description": "Set to `false` (by the template machinery) when `templateitemname` names no template break; hidden breaks are ignored like disabled ones.",
              "valType": "boolean"
            },
            "bounds": {
              "items": [
                {
                  "valType": "any"
                },
                {
                  "valType": "any"
                }
              ],
              "description": "Lower and upper bound of the break. Without `pattern`: values in data units (`['2024-01-06', '2024-01-08']`). With `pattern: 'day of week'`: day numbers 0–6 (Sunday = 0) or English day names (`['sat', 'mon']` hides Saturday and Sunday). With `pattern: 'hour'`: hours 0–24 (`[17, 9]` hides 17:00–09:00, wrapping past midnight). Patterns use UTC days and hours.",
              "valType": "info_array"
            },
            "pattern": {
              "values": ["day of week", "hour", ""],
              "description": "How `bounds` repeat: `day of week` or `hour` (date axes only), or `''` for a single span. Defaults to `day of week` when `bounds` names days, else `''`.",
              "valType": "enumerated"
            },
            "values": {
              "items": {
                "valType": "any"
              },
              "freeLength": true,
              "description": "Individual values to hide when no `bounds` are given, each hiding `[value, value + dvalue)` (e.g. holidays on a date axis).",
              "valType": "info_array"
            },
            "dvalue": {
              "min": 0,
              "dflt": 86400000,
              "description": "Size of each break in `values`, in data units (milliseconds on date axes). Default: one day.",
              "valType": "number"
            },
            "name": {
              "editType": "none",
              "description": "Name of this rangebreak, used to reference it from a template via `templateitemname`.",
              "valType": "string"
            },
            "templateitemname": {
              "editType": "plot",
              "description": "Name of a template rangebreak to inherit from. If no template item matches, this rangebreak is hidden (`visible: false`).",
              "valType": "string"
            }
          }
        },
        "domain": {
          "items": [
            {
              "min": 0,
              "max": 1,
              "dflt": 0,
              "valType": "number"
            },
            {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "valType": "number"
            }
          ],
          "dflt": [0, 1],
          "editType": "layout",
          "description": "Fraction of the plot area `[start, end]` this axis spans.",
          "valType": "info_array"
        },
        "anchor": {
          "dflt": "y",
          "extras": ["free"],
          "editType": "layout",
          "description": "The y axis this axis is drawn against, or `free`. Defaults to the y axis of the first subplot using this axis.",
          "valType": "subplotid"
        },
        "side": {
          "values": ["bottom", "top"],
          "dflt": "bottom",
          "editType": "layout+ticks+plot",
          "description": "Which side of the plot area the axis is drawn on.",
          "valType": "enumerated"
        },
        "overlaying": {
          "dflt": "x",
          "extras": ["free"],
          "editType": "layout+ticks+plot",
          "description": "Draw this axis over another x axis (`'x'`, `'x2'`, …), sharing its `domain` (this axis' own `domain` is ignored), e.g. a secondary y axis with `side: 'right'`. Unset (or `free`) by default. The target must exist and must not overlay another axis itself; otherwise this is ignored. Templates cannot set it, since it names specific axes.",
          "valType": "subplotid"
        },
        "position": {
          "min": 0,
          "max": 1,
          "dflt": 0,
          "editType": "layout+ticks+plot",
          "description": "Position of the axis in paper coordinates (0–1 across the y direction). Only used when `anchor` is `free`.",
          "valType": "number"
        },
        "autoshift": {
          "editType": "layout+ticks+plot",
          "description": "y axes with `anchor: 'free'` only: move the axis sideways so it does not overlap other free axes on the same side (and default `position` to the overlaid plot's edge, `automargin` to `true`, `shift` to ∓3 px). Plotly semantics.",
          "valType": "boolean"
        },
        "shift": {
          "editType": "layout+ticks+plot",
          "description": "y axes with `anchor: 'free'` only: extra horizontal offset in px (negative to the left). Defaults to -3 on the left and 3 on the right when `autoshift` is on, else 0.",
          "valType": "number"
        },
        "matches": {
          "strict": true,
          "noBlank": true,
          "editType": "calc",
          "description": "Link this axis' range to another axis of the same type (`'x'`, `'x2'`, `'y'`, …): they autorange together over all their data, and zoom, pan and `relayout` of one move all. The linked axes share `range`, `autorange`, `rangemode`, `rangebreaks`, `constrain` and the category order. An axis that would create a loop, or a target of another type, is ignored.",
          "valType": "string"
        },
        "scaleanchor": {
          "editType": "layout+ticks+plot",
          "description": "Lock the scale (px per unit) of this axis to another axis (`'x'`, `'y2'`, …) of the same type, times `scaleratio`: `yaxis: { scaleanchor: 'x' }` keeps one unit the same length on both axes, e.g. for maps or square plots. Zooming either axis zooms the other. `false` or unset for none (the y axis of an `image` trace defaults to its anchor, for square pixels, as in Plotly); ignored with `matches` or when it would create a loop.",
          "valType": "any"
        },
        "scaleratio": {
          "min": 0,
          "dflt": 1,
          "editType": "layout+ticks+plot",
          "description": "With `scaleanchor`: px per unit of this axis divided by px per unit of the anchor axis (2 makes one unit here twice as long).",
          "valType": "number"
        },
        "constrain": {
          "values": ["range", "domain"],
          "dflt": "range",
          "editType": "layout+ticks+plot",
          "description": "How a `scaleanchor` / `matches` constraint is met on this axis: `range` widens the range, `domain` shrinks the axis (and its subplot) inside its `domain`. Default `domain` on the axes of `image` traces (Plotly).",
          "valType": "enumerated"
        },
        "constraintoward": {
          "values": ["left", "center", "right", "top", "middle", "bottom"],
          "editType": "layout+ticks+plot",
          "description": "Which end stays put when a constraint changes the range or domain: `left`/`center`/`right` for x axes (default `center`), `bottom`/`middle`/`top` for y axes (default `middle`).",
          "valType": "enumerated"
        },
        "layer": {
          "values": ["above traces", "below traces"],
          "dflt": "above traces",
          "editType": "plot",
          "description": "Draw the axis line, ticks and labels above or below the traces. Grid lines are always below.",
          "valType": "enumerated"
        },
        "automargin": {
          "flags": ["height", "width", "left", "right", "top", "bottom"],
          "extras": [true, false],
          "dflt": false,
          "editType": "layout+ticks+plot",
          "description": "Grow the figure margins so tick labels and the title fit (E4.2). `true` allows every direction; flags restrict it.",
          "valType": "flaglist"
        },
        "tickmode": {
          "values": ["auto", "linear", "array", "sync"],
          "editType": "ticks",
          "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
          "valType": "enumerated"
        },
        "nticks": {
          "min": 0,
          "dflt": 0,
          "editType": "ticks",
          "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
          "valType": "integer"
        },
        "tick0": {
          "editType": "ticks",
          "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
          "valType": "any"
        },
        "dtick": {
          "editType": "ticks",
          "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
          "valType": "any"
        },
        "tickvals": {
          "editType": "ticks",
          "description": "Tick positions for `tickmode: array` (data units).",
          "valType": "data_array"
        },
        "ticktext": {
          "editType": "ticks",
          "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
          "valType": "data_array"
        },
        "showticklabels": {
          "dflt": true,
          "editType": "layout+ticks",
          "description": "Show tick labels.",
          "valType": "boolean"
        },
        "tickfont": {
          "description": "Tick-label font. Defaults to `layout.font`.",
          "editType": "layout+ticks",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "description": "Font size in CSS pixels.",
            "valType": "number"
          },
          "color": {
            "description": "Text color.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "description": "Font style.",
            "valType": "enumerated"
          },
          "variant": {
            "values": [
              "normal",
              "small-caps",
              "all-small-caps",
              "all-petite-caps",
              "petite-caps",
              "unicase"
            ],
            "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
            "valType": "enumerated"
          },
          "textcase": {
            "values": ["normal", "word caps", "upper", "lower"],
            "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
            "valType": "enumerated"
          },
          "lineposition": {
            "flags": ["under", "over", "through"],
            "extras": ["none"],
            "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
            "valType": "flaglist"
          },
          "shadow": {
            "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
            "valType": "string"
          }
        },
        "tickangle": {
          "extras": ["auto"],
          "dflt": "auto",
          "editType": "layout+ticks",
          "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
          "valType": "angle"
        },
        "autotickangles": {
          "items": {
            "valType": "angle"
          },
          "dflt": [0, 30, 90],
          "editType": "layout+ticks",
          "description": "Candidate angles, in order of preference, for `tickangle: auto`.",
          "valType": "info_array"
        },
        "tickformat": {
          "dflt": "",
          "editType": "layout+ticks",
          "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
          "valType": "string"
        },
        "tickformatstops": {
          "editType": "layout+ticks",
          "description": "Zoom-dependent tick formats: the first enabled stop whose `dtickrange` contains the current tick step replaces `tickformat`.",
          "itemName": "tickformatstop",
          "role": "items",
          "items": {
            "role": "object",
            "enabled": {
              "dflt": true,
              "description": "Whether this stop is used.",
              "valType": "boolean"
            },
            "visible": {
              "dflt": true,
              "description": "Set to `false` (by the template machinery) when `templateitemname` names no template stop; hidden stops are ignored like disabled ones.",
              "valType": "boolean"
            },
            "dtickrange": {
              "items": [
                {
                  "dflt": null,
                  "valType": "any"
                },
                {
                  "dflt": null,
                  "valType": "any"
                }
              ],
              "description": "Range `[min, max]` of the tick step (`dtick`) this format applies to; `null` for an open end. Date steps are in ms or `M<n>`.",
              "valType": "info_array"
            },
            "value": {
              "dflt": "",
              "description": "The `tickformat` to use while the tick step is inside `dtickrange`.",
              "valType": "string"
            },
            "name": {
              "editType": "none",
              "description": "Name of this tickformatstop, used to reference it from a template via `templateitemname`.",
              "valType": "string"
            },
            "templateitemname": {
              "editType": "plot",
              "description": "Name of a template tickformatstop to inherit from. If no template item matches, this tickformatstop is hidden (`visible: false`).",
              "valType": "string"
            }
          }
        },
        "hoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "Format of this axis’ values in hover labels (same syntax as `tickformat`). Empty uses the tick format with extra precision.",
          "valType": "string"
        },
        "tickprefix": {
          "dflt": "",
          "editType": "layout+ticks",
          "description": "Text before each tick label.",
          "valType": "string"
        },
        "showtickprefix": {
          "values": ["all", "first", "last", "none"],
          "dflt": "all",
          "editType": "layout+ticks",
          "description": "Which tick labels get `tickprefix`.",
          "valType": "enumerated"
        },
        "ticksuffix": {
          "dflt": "",
          "editType": "layout+ticks",
          "description": "Text after each tick label.",
          "valType": "string"
        },
        "showticksuffix": {
          "values": ["all", "first", "last", "none"],
          "dflt": "all",
          "editType": "layout+ticks",
          "description": "Which tick labels get `ticksuffix`.",
          "valType": "enumerated"
        },
        "exponentformat": {
          "values": ["none", "e", "E", "power", "SI", "B"],
          "dflt": "B",
          "editType": "layout+ticks",
          "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
          "valType": "enumerated"
        },
        "showexponent": {
          "values": ["all", "first", "last", "none"],
          "dflt": "all",
          "editType": "layout+ticks",
          "description": "Which tick labels show the exponent.",
          "valType": "enumerated"
        },
        "minexponent": {
          "min": 0,
          "dflt": 3,
          "editType": "layout+ticks",
          "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
          "valType": "number"
        },
        "separatethousands": {
          "dflt": false,
          "editType": "layout+ticks",
          "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
          "valType": "boolean"
        },
        "ticklabelmode": {
          "values": ["instant", "period"],
          "dflt": "instant",
          "editType": "ticks",
          "description": "Date axes: `instant` labels the tick instant; `period` centers each label in the period that starts at its tick (e.g. month names between month ticks).",
          "valType": "enumerated"
        },
        "ticklabelposition": {
          "values": [
            "outside",
            "inside",
            "outside top",
            "inside top",
            "outside left",
            "inside left",
            "outside right",
            "inside right",
            "outside bottom",
            "inside bottom"
          ],
          "dflt": "outside",
          "editType": "layout+ticks+plot",
          "description": "Tick labels outside or inside the plot area, optionally shifted to one side of the tick (`top`/`bottom` for y axes, `left`/`right` for x axes).",
          "valType": "enumerated"
        },
        "ticklabeloverflow": {
          "values": ["allow", "hide past div", "hide past domain"],
          "editType": "ticks",
          "description": "What to do with labels that overflow: keep them, or hide those past the figure or the axis domain. Defaults to `hide past div` for outside labels and `hide past domain` for inside labels.",
          "valType": "enumerated"
        },
        "ticklabelstep": {
          "min": 1,
          "dflt": 1,
          "editType": "ticks",
          "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
          "valType": "integer"
        },
        "minorloglabels": {
          "values": ["small digits", "complete", "none"],
          "dflt": "small digits",
          "editType": "layout+ticks",
          "description": "Log axes whose automatic ticks fall between powers of ten (2, 5 or every digit): `small digits` labels them with a small digit (2, 5), `complete` with the full value in the tick font, with `tickprefix`/`ticksuffix` (20, 50, 200), `none` leaves them unlabelled.",
          "valType": "enumerated"
        },
        "ticklabelshift": {
          "dflt": 0,
          "editType": "layout+ticks",
          "description": "Shift of tick labels along the axis, in px.",
          "valType": "integer"
        },
        "ticklabelstandoff": {
          "dflt": 0,
          "editType": "layout+ticks",
          "description": "Extra distance between tick labels and ticks, in px.",
          "valType": "integer"
        },
        "categoryorder": {
          "values": [
            "trace",
            "category ascending",
            "category descending",
            "array",
            "total ascending",
            "total descending",
            "min ascending",
            "min descending",
            "max ascending",
            "max descending",
            "sum ascending",
            "sum descending",
            "mean ascending",
            "mean descending",
            "median ascending",
            "median descending"
          ],
          "editType": "calc",
          "description": "Order of categories: as they first appear in the traces (`trace`), alphabetical/numerical (`category ascending|descending`), `categoryarray` first (`array`), or by an aggregate of the trace values per category (`total`, `min`, `max`, `sum`, `mean`, `median`). Defaults to `array` when `categoryarray` is set, else `trace`.",
          "valType": "enumerated"
        },
        "categoryarray": {
          "editType": "calc",
          "description": "Category order for `categoryorder: array`. Categories not listed follow in trace order.",
          "valType": "data_array"
        },
        "showdividers": {
          "dflt": true,
          "editType": "ticks",
          "description": "Multicategory axes: draw divider lines between groups.",
          "valType": "boolean"
        },
        "dividercolor": {
          "editType": "ticks",
          "description": "Multicategory divider color. Defaults to `color`.",
          "valType": "color"
        },
        "dividerwidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Multicategory divider width in px.",
          "valType": "number"
        },
        "showline": {
          "dflt": false,
          "editType": "layout+ticks+plot",
          "description": "Draw the axis line.",
          "valType": "boolean"
        },
        "linecolor": {
          "editType": "ticks",
          "description": "Axis line color. Defaults to `color`.",
          "valType": "color"
        },
        "linewidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Axis line width in px.",
          "valType": "number"
        },
        "mirror": {
          "values": [true, "ticks", false, "all", "allticks"],
          "dflt": false,
          "editType": "layout+ticks+plot",
          "description": "Repeat the axis line on the opposite side of the plot area: `true` (line), `ticks` (line and ticks); `all`/`allticks` do the same on every subplot sharing this axis.",
          "valType": "enumerated"
        },
        "ticks": {
          "values": ["outside", "inside", ""],
          "dflt": "",
          "editType": "layout+ticks+plot",
          "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
          "valType": "enumerated"
        },
        "ticklen": {
          "min": 0,
          "dflt": 5,
          "editType": "layout+ticks",
          "description": "Tick length in px.",
          "valType": "number"
        },
        "tickwidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Tick width in px.",
          "valType": "number"
        },
        "tickcolor": {
          "editType": "ticks",
          "description": "Tick color. Defaults to `color`.",
          "valType": "color"
        },
        "showgrid": {
          "dflt": true,
          "editType": "ticks",
          "description": "Draw grid lines at each tick.",
          "valType": "boolean"
        },
        "gridcolor": {
          "dflt": "#eee",
          "editType": "ticks",
          "description": "Grid line color.",
          "valType": "color"
        },
        "gridwidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Grid line width in px.",
          "valType": "number"
        },
        "griddash": {
          "dflt": "solid",
          "editType": "ticks",
          "description": "Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a CSS-like list of dash lengths in px (`5px,10px,2px,2px`).",
          "valType": "string"
        },
        "zeroline": {
          "dflt": true,
          "editType": "ticks",
          "description": "Draw a line at 0 (linear axes whose range contains 0).",
          "valType": "boolean"
        },
        "zerolinecolor": {
          "editType": "ticks",
          "description": "Zero line color. Defaults to `color`.",
          "valType": "color"
        },
        "zerolinewidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Zero line width in px.",
          "valType": "number"
        },
        "showspikes": {
          "editType": "modebar",
          "description": "Draw a spike line from the hovered point to this axis. Defaults to `false`, or `true` when any other `spike*` attribute is set or `hovermode` is this axis' unified mode (`x unified` for x axes).",
          "valType": "boolean"
        },
        "spikecolor": {
          "editType": "none",
          "description": "Spike line color. Defaults to the hovered point's color (or a contrasting color when that is too close to the background).",
          "valType": "color"
        },
        "spikethickness": {
          "dflt": 3,
          "editType": "none",
          "description": "Spike line width in px (1.5 in unified hover).",
          "valType": "number"
        },
        "spikedash": {
          "dflt": "dash",
          "editType": "none",
          "description": "Spike line dash (`dot` in unified hover). Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a CSS-like list of dash lengths in px (`5px,10px,2px,2px`).",
          "valType": "string"
        },
        "spikemode": {
          "flags": ["toaxis", "across", "marker"],
          "dflt": "toaxis",
          "editType": "none",
          "description": "`toaxis`: from the point to the axis; `across`: across the whole plot area; `marker`: a dot on the axis. Combine with `+` (`across+marker`). Unified hover defaults to `across`.",
          "valType": "flaglist"
        },
        "spikesnap": {
          "values": ["data", "cursor", "hovered data"],
          "dflt": "hovered data",
          "editType": "none",
          "description": "`hovered data`: the spike follows the hovered point; `data`: the closest point within `spikedistance`, even when no label shows; `cursor`: the pointer position.",
          "valType": "enumerated"
        },
        "minor": {
          "editType": "ticks",
          "description": "Minor ticks and grid lines between the major ticks.",
          "role": "object",
          "tickmode": {
            "values": ["auto", "linear", "array"],
            "description": "As the major `tickmode`. Defaults to `array` when `minor.tickvals` is set, `linear` when `minor.dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 5,
            "description": "Maximum number of minor ticks per major interval for `tickmode: auto` (0 picks it from the axis length).",
            "valType": "integer"
          },
          "tick0": {
            "description": "As the major `tick0`. Defaults to the major `tick0`.",
            "valType": "any"
          },
          "dtick": {
            "description": "Minor tick step. Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "description": "Minor tick positions for `tickmode: array`.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "description": "Draw minor tick marks outside or inside the plot area, or not at all.",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "description": "Minor tick length in px. Defaults to 60% of `ticklen`.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "description": "Minor tick width in px. Defaults to `tickwidth`.",
            "valType": "number"
          },
          "tickcolor": {
            "description": "Minor tick color. Defaults to `tickcolor`.",
            "valType": "color"
          },
          "showgrid": {
            "dflt": false,
            "description": "Draw minor grid lines.",
            "valType": "boolean"
          },
          "gridcolor": {
            "description": "Minor grid color. Defaults to `gridcolor` blended halfway to the plot background.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "description": "Minor grid width in px. Defaults to `gridwidth`.",
            "valType": "number"
          },
          "griddash": {
            "description": "Minor grid dash style. Defaults to `griddash`. Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a CSS-like list of dash lengths in px (`5px,10px,2px,2px`).",
            "valType": "string"
          }
        },
        "title": {
          "editType": "layout+ticks+plot",
          "description": "Axis title.",
          "role": "object",
          "text": {
            "dflt": "",
            "description": "Axis title text (supports rich-text tags, E2.10).",
            "valType": "string"
          },
          "font": {
            "description": "Axis title font. Defaults to `layout.font` with 1.2× size.",
            "editType": "layout+ticks+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "standoff": {
            "min": 0,
            "description": "Distance in px between the tick labels and the title. By default it follows the tick labels automatically.",
            "valType": "number"
          }
        },
        "rangeslider": {
          "editType": "layout",
          "description": "Range slider (plan E5.9): an overview of all the data under the x axis, with a window over the range in view. Drag the window to pan, its ends to zoom, or click elsewhere to center the window there; the axis range changes with one `relayout` at the end of the drag. Y axes anchored to an axis with a range slider default to `fixedrange: true`, as in Plotly.",
          "role": "object",
          "visible": {
            "description": "Show the range slider. Defaults to `true` when `rangeslider` is given (`rangeslider: {}` is enough) or the axis has an `ohlc` or `candlestick` trace, else `false`.",
            "valType": "boolean"
          },
          "thickness": {
            "min": 0,
            "max": 1,
            "dflt": 0.15,
            "description": "Height of the slider as a fraction of the figure height minus `margin.t` and `margin.b`. The bottom margin grows to make room for it.",
            "valType": "number"
          },
          "bgcolor": {
            "description": "Background of the slider. Defaults to `plot_bgcolor`.",
            "valType": "color"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the slider.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the slider, px.",
            "valType": "integer"
          },
          "autorange": {
            "description": "Span every data point of the axis (its autorange, whatever the axis range in view). Defaults to `true` unless a full `range` is given.",
            "valType": "boolean"
          },
          "range": {
            "items": [
              {
                "dflt": null,
                "valType": "any"
              },
              {
                "dflt": null,
                "valType": "any"
              }
            ],
            "description": "Range the slider spans, in data units, like the axis `range` (dates on date axes, exponents on log axes). The slider always covers the axis range in view as well.",
            "valType": "info_array"
          },
          "yaxis": {
            "description": "Thumbnail y range per y axis: `yaxis` for the subplot on `y`, `yaxis2` for `y2`, … (one thumbnail per subplot on this x axis, drawn over each other).",
            "subplot": "y",
            "role": "object",
            "rangemode": {
              "values": ["auto", "fixed", "match"],
              "description": "The y range of this subplot's thumbnail: `match` follows the y axis range in view, `auto` spans all the y data (autorange), `fixed` uses `range`. Defaults to `fixed` with a valid `range`, else `match`.",
              "valType": "enumerated"
            },
            "range": {
              "items": [
                {
                  "dflt": null,
                  "valType": "any"
                },
                {
                  "dflt": null,
                  "valType": "any"
                }
              ],
              "description": "Thumbnail y range for `rangemode: 'fixed'`, in data units, like the axis `range` (dates on date axes, exponents on log axes).",
              "valType": "info_array"
            }
          }
        },
        "rangeselector": {
          "editType": "layout",
          "description": "Range selector (plan E5.9): buttons over the chart that set the x range to a preset span ending at the current range end (last 6 months, year to date, all). Date axes only. The button whose range is in view shows as active.",
          "role": "object",
          "visible": {
            "description": "Show the range selector. Defaults to `true` when it has `buttons`.",
            "valType": "boolean"
          },
          "buttons": {
            "description": "The buttons, left to right.",
            "itemName": "button",
            "role": "items",
            "items": {
              "role": "object",
              "visible": {
                "dflt": true,
                "description": "Show this button.",
                "valType": "boolean"
              },
              "step": {
                "values": ["month", "year", "day", "hour", "minute", "second", "all"],
                "dflt": "month",
                "description": "Unit of the range the button sets, with `count`; `all` autoranges the axis instead.",
                "valType": "enumerated"
              },
              "stepmode": {
                "values": ["backward", "todate"],
                "dflt": "backward",
                "description": "`backward`: the range ends at the current range end and starts `count` `step`s before it. `todate`: it starts at the start of the `step` period, `count - 1` periods back (`count: 1, step: 'year'` is year-to-date).",
                "valType": "enumerated"
              },
              "count": {
                "min": 0,
                "dflt": 1,
                "description": "Number of `step`s the range spans.",
                "valType": "number"
              },
              "label": {
                "description": "Button text. Default: `count` and the first letter of `step` (`6m`), or `all`.",
                "valType": "string"
              },
              "name": {
                "editType": "none",
                "description": "Name of this button, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template button to inherit from. If no template item matches, this button is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "x": {
            "min": -2,
            "max": 3,
            "description": "Horizontal position in paper coordinates (fractions of the plot area width). Defaults to the start of the axis domain. Give `x` and `y` together; one alone is ignored.",
            "valType": "number"
          },
          "xanchor": {
            "values": ["auto", "left", "center", "right"],
            "dflt": "left",
            "description": "Which side of the button row `x` refers to.",
            "valType": "enumerated"
          },
          "y": {
            "min": -2,
            "max": 3,
            "description": "Vertical position in paper coordinates. Defaults to just above the highest subplot on this x axis.",
            "valType": "number"
          },
          "yanchor": {
            "values": ["auto", "top", "middle", "bottom"],
            "dflt": "bottom",
            "description": "Which side of the button row `y` refers to.",
            "valType": "enumerated"
          },
          "font": {
            "description": "Button font. Defaults to `layout.font`.",
            "editType": "layout",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "bgcolor": {
            "dflt": "#eee",
            "description": "Background of the buttons.",
            "valType": "color"
          },
          "activecolor": {
            "description": "Background of the active button (the one whose range is in view) and of hovered buttons. Defaults to `bgcolor` darkened (light colors) or lightened (dark colors).",
            "valType": "color"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the buttons.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the buttons, px.",
            "valType": "number"
          }
        }
      },
      "yaxis": {
        "editType": "calc",
        "description": "A y axis. `yaxis2`, `yaxis3`, … declare further y axes, referenced from traces as `'y2'`, `'y3'`, ….",
        "role": "object",
        "subplot": "y",
        "visible": {
          "dflt": true,
          "editType": "layout+ticks+plot",
          "description": "Draw the axis (line, ticks, labels, grid and title). A hidden axis still maps data to pixels.",
          "valType": "boolean"
        },
        "color": {
          "dflt": "#444",
          "editType": "ticks",
          "description": "Base color of the axis: the default for `linecolor`, `tickcolor`, `zerolinecolor`, `dividercolor` and (when changed) the tick-label and title font colors.",
          "valType": "color"
        },
        "type": {
          "values": ["-", "linear", "log", "date", "category", "multicategory"],
          "dflt": "-",
          "editType": "calc",
          "description": "Axis type. `'-'` detects the type from the data of the first trace on this axis (Plotly's rules: mostly dates → `date`; more than twice as many distinct strings as numbers → `category`; two-level `[[groups], [items]]` arrays → `multicategory`; otherwise `linear`).",
          "valType": "enumerated"
        },
        "autotypenumbers": {
          "values": ["convert types", "strict"],
          "dflt": "convert types",
          "editType": "calc",
          "description": "How type detection treats numeric strings: `convert types` counts `'12'` as a number; `strict` counts only real numbers, so numeric strings make a `category` axis.",
          "valType": "enumerated"
        },
        "autorange": {
          "values": [true, false, "reversed", "min reversed", "max reversed", "min", "max"],
          "dflt": true,
          "editType": "layout+ticks+plot",
          "description": "Whether the range is computed from the data. `reversed` autoranges with the axis flipped. `min`/`max` autorange only that end and take the other from `range` (`min reversed`/`max reversed` also flip the axis). Defaults to `false` when a full `range` is given, to `min`/`max` when one end of `range` is `null`, and to `reversed` on a y axis only `image` traces use (row 0 at the top, as in Plotly).",
          "valType": "enumerated"
        },
        "autorangeoptions": {
          "editType": "layout+ticks+plot",
          "description": "Constraints applied to the computed autorange.",
          "role": "object",
          "minallowed": {
            "description": "The autoranged minimum is exactly this value (data units).",
            "valType": "any"
          },
          "maxallowed": {
            "description": "The autoranged maximum is exactly this value (data units).",
            "valType": "any"
          },
          "clipmin": {
            "description": "The autoranged minimum is at least this value (data units).",
            "valType": "any"
          },
          "clipmax": {
            "description": "The autoranged maximum is at most this value (data units).",
            "valType": "any"
          },
          "include": {
            "arrayOk": true,
            "description": "Value(s) the autorange must include (data units).",
            "valType": "any"
          }
        },
        "rangemode": {
          "values": ["normal", "tozero", "nonnegative"],
          "dflt": "normal",
          "editType": "layout+ticks+plot",
          "description": "Linear axes only. `tozero` extends the autorange to include 0; `nonnegative` keeps it ≥ 0.",
          "valType": "enumerated"
        },
        "fixedrange": {
          "dflt": false,
          "editType": "none",
          "description": "Disables zoom and pan on this axis (drag, scroll, and modebar zoom leave its range alone).",
          "valType": "boolean"
        },
        "range": {
          "items": [
            {
              "dflt": null,
              "valType": "any"
            },
            {
              "dflt": null,
              "valType": "any"
            }
          ],
          "editType": "ticks+plot",
          "animatable": true,
          "description": "Visible range `[start, end]` in data units (numbers, dates or category names; exponents on log axes, as in Plotly). Setting it turns `autorange` off; `null` for one end autoranges that end only.",
          "valType": "info_array"
        },
        "minallowed": {
          "editType": "plot",
          "description": "Lowest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
          "valType": "any"
        },
        "maxallowed": {
          "editType": "plot",
          "description": "Highest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
          "valType": "any"
        },
        "rangebreaks": {
          "editType": "calc",
          "description": "Spans hidden from the axis (plan E3.8): the axis skips them, so a weekday-only stock chart has no gaps for weekends or nights. Date and linear axes; data inside a break is not drawn. Ticks never land in a break; hover, zoom and pan work across breaks.",
          "itemName": "rangebreak",
          "role": "items",
          "items": {
            "role": "object",
            "enabled": {
              "dflt": true,
              "description": "Whether this range break is applied.",
              "valType": "boolean"
            },
            "visible": {
              "dflt": true,
              "description": "Set to `false` (by the template machinery) when `templateitemname` names no template break; hidden breaks are ignored like disabled ones.",
              "valType": "boolean"
            },
            "bounds": {
              "items": [
                {
                  "valType": "any"
                },
                {
                  "valType": "any"
                }
              ],
              "description": "Lower and upper bound of the break. Without `pattern`: values in data units (`['2024-01-06', '2024-01-08']`). With `pattern: 'day of week'`: day numbers 0–6 (Sunday = 0) or English day names (`['sat', 'mon']` hides Saturday and Sunday). With `pattern: 'hour'`: hours 0–24 (`[17, 9]` hides 17:00–09:00, wrapping past midnight). Patterns use UTC days and hours.",
              "valType": "info_array"
            },
            "pattern": {
              "values": ["day of week", "hour", ""],
              "description": "How `bounds` repeat: `day of week` or `hour` (date axes only), or `''` for a single span. Defaults to `day of week` when `bounds` names days, else `''`.",
              "valType": "enumerated"
            },
            "values": {
              "items": {
                "valType": "any"
              },
              "freeLength": true,
              "description": "Individual values to hide when no `bounds` are given, each hiding `[value, value + dvalue)` (e.g. holidays on a date axis).",
              "valType": "info_array"
            },
            "dvalue": {
              "min": 0,
              "dflt": 86400000,
              "description": "Size of each break in `values`, in data units (milliseconds on date axes). Default: one day.",
              "valType": "number"
            },
            "name": {
              "editType": "none",
              "description": "Name of this rangebreak, used to reference it from a template via `templateitemname`.",
              "valType": "string"
            },
            "templateitemname": {
              "editType": "plot",
              "description": "Name of a template rangebreak to inherit from. If no template item matches, this rangebreak is hidden (`visible: false`).",
              "valType": "string"
            }
          }
        },
        "domain": {
          "items": [
            {
              "min": 0,
              "max": 1,
              "dflt": 0,
              "valType": "number"
            },
            {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "valType": "number"
            }
          ],
          "dflt": [0, 1],
          "editType": "layout",
          "description": "Fraction of the plot area `[start, end]` this axis spans.",
          "valType": "info_array"
        },
        "anchor": {
          "dflt": "x",
          "extras": ["free"],
          "editType": "layout",
          "description": "The x axis this axis is drawn against, or `free`. Defaults to the x axis of the first subplot using this axis.",
          "valType": "subplotid"
        },
        "side": {
          "values": ["left", "right"],
          "dflt": "left",
          "editType": "layout+ticks+plot",
          "description": "Which side of the plot area the axis is drawn on.",
          "valType": "enumerated"
        },
        "overlaying": {
          "dflt": "y",
          "extras": ["free"],
          "editType": "layout+ticks+plot",
          "description": "Draw this axis over another y axis (`'y'`, `'y2'`, …), sharing its `domain` (this axis' own `domain` is ignored), e.g. a secondary y axis with `side: 'right'`. Unset (or `free`) by default. The target must exist and must not overlay another axis itself; otherwise this is ignored. Templates cannot set it, since it names specific axes.",
          "valType": "subplotid"
        },
        "position": {
          "min": 0,
          "max": 1,
          "dflt": 0,
          "editType": "layout+ticks+plot",
          "description": "Position of the axis in paper coordinates (0–1 across the x direction). Only used when `anchor` is `free`.",
          "valType": "number"
        },
        "autoshift": {
          "editType": "layout+ticks+plot",
          "description": "y axes with `anchor: 'free'` only: move the axis sideways so it does not overlap other free axes on the same side (and default `position` to the overlaid plot's edge, `automargin` to `true`, `shift` to ∓3 px). Plotly semantics.",
          "valType": "boolean"
        },
        "shift": {
          "editType": "layout+ticks+plot",
          "description": "y axes with `anchor: 'free'` only: extra horizontal offset in px (negative to the left). Defaults to -3 on the left and 3 on the right when `autoshift` is on, else 0.",
          "valType": "number"
        },
        "matches": {
          "strict": true,
          "noBlank": true,
          "editType": "calc",
          "description": "Link this axis' range to another axis of the same type (`'x'`, `'x2'`, `'y'`, …): they autorange together over all their data, and zoom, pan and `relayout` of one move all. The linked axes share `range`, `autorange`, `rangemode`, `rangebreaks`, `constrain` and the category order. An axis that would create a loop, or a target of another type, is ignored.",
          "valType": "string"
        },
        "scaleanchor": {
          "editType": "layout+ticks+plot",
          "description": "Lock the scale (px per unit) of this axis to another axis (`'x'`, `'y2'`, …) of the same type, times `scaleratio`: `yaxis: { scaleanchor: 'x' }` keeps one unit the same length on both axes, e.g. for maps or square plots. Zooming either axis zooms the other. `false` or unset for none (the y axis of an `image` trace defaults to its anchor, for square pixels, as in Plotly); ignored with `matches` or when it would create a loop.",
          "valType": "any"
        },
        "scaleratio": {
          "min": 0,
          "dflt": 1,
          "editType": "layout+ticks+plot",
          "description": "With `scaleanchor`: px per unit of this axis divided by px per unit of the anchor axis (2 makes one unit here twice as long).",
          "valType": "number"
        },
        "constrain": {
          "values": ["range", "domain"],
          "dflt": "range",
          "editType": "layout+ticks+plot",
          "description": "How a `scaleanchor` / `matches` constraint is met on this axis: `range` widens the range, `domain` shrinks the axis (and its subplot) inside its `domain`. Default `domain` on the axes of `image` traces (Plotly).",
          "valType": "enumerated"
        },
        "constraintoward": {
          "values": ["left", "center", "right", "top", "middle", "bottom"],
          "editType": "layout+ticks+plot",
          "description": "Which end stays put when a constraint changes the range or domain: `left`/`center`/`right` for x axes (default `center`), `bottom`/`middle`/`top` for y axes (default `middle`).",
          "valType": "enumerated"
        },
        "layer": {
          "values": ["above traces", "below traces"],
          "dflt": "above traces",
          "editType": "plot",
          "description": "Draw the axis line, ticks and labels above or below the traces. Grid lines are always below.",
          "valType": "enumerated"
        },
        "automargin": {
          "flags": ["height", "width", "left", "right", "top", "bottom"],
          "extras": [true, false],
          "dflt": false,
          "editType": "layout+ticks+plot",
          "description": "Grow the figure margins so tick labels and the title fit (E4.2). `true` allows every direction; flags restrict it.",
          "valType": "flaglist"
        },
        "tickmode": {
          "values": ["auto", "linear", "array", "sync"],
          "editType": "ticks",
          "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
          "valType": "enumerated"
        },
        "nticks": {
          "min": 0,
          "dflt": 0,
          "editType": "ticks",
          "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
          "valType": "integer"
        },
        "tick0": {
          "editType": "ticks",
          "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
          "valType": "any"
        },
        "dtick": {
          "editType": "ticks",
          "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
          "valType": "any"
        },
        "tickvals": {
          "editType": "ticks",
          "description": "Tick positions for `tickmode: array` (data units).",
          "valType": "data_array"
        },
        "ticktext": {
          "editType": "ticks",
          "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
          "valType": "data_array"
        },
        "showticklabels": {
          "dflt": true,
          "editType": "layout+ticks",
          "description": "Show tick labels.",
          "valType": "boolean"
        },
        "tickfont": {
          "description": "Tick-label font. Defaults to `layout.font`.",
          "editType": "layout+ticks",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "description": "Font size in CSS pixels.",
            "valType": "number"
          },
          "color": {
            "description": "Text color.",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "description": "Font style.",
            "valType": "enumerated"
          },
          "variant": {
            "values": [
              "normal",
              "small-caps",
              "all-small-caps",
              "all-petite-caps",
              "petite-caps",
              "unicase"
            ],
            "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
            "valType": "enumerated"
          },
          "textcase": {
            "values": ["normal", "word caps", "upper", "lower"],
            "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
            "valType": "enumerated"
          },
          "lineposition": {
            "flags": ["under", "over", "through"],
            "extras": ["none"],
            "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
            "valType": "flaglist"
          },
          "shadow": {
            "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
            "valType": "string"
          }
        },
        "tickangle": {
          "extras": ["auto"],
          "dflt": "auto",
          "editType": "layout+ticks",
          "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
          "valType": "angle"
        },
        "autotickangles": {
          "items": {
            "valType": "angle"
          },
          "dflt": [0, 30, 90],
          "editType": "layout+ticks",
          "description": "Candidate angles, in order of preference, for `tickangle: auto`.",
          "valType": "info_array"
        },
        "tickformat": {
          "dflt": "",
          "editType": "layout+ticks",
          "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
          "valType": "string"
        },
        "tickformatstops": {
          "editType": "layout+ticks",
          "description": "Zoom-dependent tick formats: the first enabled stop whose `dtickrange` contains the current tick step replaces `tickformat`.",
          "itemName": "tickformatstop",
          "role": "items",
          "items": {
            "role": "object",
            "enabled": {
              "dflt": true,
              "description": "Whether this stop is used.",
              "valType": "boolean"
            },
            "visible": {
              "dflt": true,
              "description": "Set to `false` (by the template machinery) when `templateitemname` names no template stop; hidden stops are ignored like disabled ones.",
              "valType": "boolean"
            },
            "dtickrange": {
              "items": [
                {
                  "dflt": null,
                  "valType": "any"
                },
                {
                  "dflt": null,
                  "valType": "any"
                }
              ],
              "description": "Range `[min, max]` of the tick step (`dtick`) this format applies to; `null` for an open end. Date steps are in ms or `M<n>`.",
              "valType": "info_array"
            },
            "value": {
              "dflt": "",
              "description": "The `tickformat` to use while the tick step is inside `dtickrange`.",
              "valType": "string"
            },
            "name": {
              "editType": "none",
              "description": "Name of this tickformatstop, used to reference it from a template via `templateitemname`.",
              "valType": "string"
            },
            "templateitemname": {
              "editType": "plot",
              "description": "Name of a template tickformatstop to inherit from. If no template item matches, this tickformatstop is hidden (`visible: false`).",
              "valType": "string"
            }
          }
        },
        "hoverformat": {
          "dflt": "",
          "editType": "none",
          "description": "Format of this axis’ values in hover labels (same syntax as `tickformat`). Empty uses the tick format with extra precision.",
          "valType": "string"
        },
        "tickprefix": {
          "dflt": "",
          "editType": "layout+ticks",
          "description": "Text before each tick label.",
          "valType": "string"
        },
        "showtickprefix": {
          "values": ["all", "first", "last", "none"],
          "dflt": "all",
          "editType": "layout+ticks",
          "description": "Which tick labels get `tickprefix`.",
          "valType": "enumerated"
        },
        "ticksuffix": {
          "dflt": "",
          "editType": "layout+ticks",
          "description": "Text after each tick label.",
          "valType": "string"
        },
        "showticksuffix": {
          "values": ["all", "first", "last", "none"],
          "dflt": "all",
          "editType": "layout+ticks",
          "description": "Which tick labels get `ticksuffix`.",
          "valType": "enumerated"
        },
        "exponentformat": {
          "values": ["none", "e", "E", "power", "SI", "B"],
          "dflt": "B",
          "editType": "layout+ticks",
          "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
          "valType": "enumerated"
        },
        "showexponent": {
          "values": ["all", "first", "last", "none"],
          "dflt": "all",
          "editType": "layout+ticks",
          "description": "Which tick labels show the exponent.",
          "valType": "enumerated"
        },
        "minexponent": {
          "min": 0,
          "dflt": 3,
          "editType": "layout+ticks",
          "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
          "valType": "number"
        },
        "separatethousands": {
          "dflt": false,
          "editType": "layout+ticks",
          "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
          "valType": "boolean"
        },
        "ticklabelmode": {
          "values": ["instant", "period"],
          "dflt": "instant",
          "editType": "ticks",
          "description": "Date axes: `instant` labels the tick instant; `period` centers each label in the period that starts at its tick (e.g. month names between month ticks).",
          "valType": "enumerated"
        },
        "ticklabelposition": {
          "values": [
            "outside",
            "inside",
            "outside top",
            "inside top",
            "outside left",
            "inside left",
            "outside right",
            "inside right",
            "outside bottom",
            "inside bottom"
          ],
          "dflt": "outside",
          "editType": "layout+ticks+plot",
          "description": "Tick labels outside or inside the plot area, optionally shifted to one side of the tick (`top`/`bottom` for y axes, `left`/`right` for x axes).",
          "valType": "enumerated"
        },
        "ticklabeloverflow": {
          "values": ["allow", "hide past div", "hide past domain"],
          "editType": "ticks",
          "description": "What to do with labels that overflow: keep them, or hide those past the figure or the axis domain. Defaults to `hide past div` for outside labels and `hide past domain` for inside labels.",
          "valType": "enumerated"
        },
        "ticklabelstep": {
          "min": 1,
          "dflt": 1,
          "editType": "ticks",
          "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
          "valType": "integer"
        },
        "minorloglabels": {
          "values": ["small digits", "complete", "none"],
          "dflt": "small digits",
          "editType": "layout+ticks",
          "description": "Log axes whose automatic ticks fall between powers of ten (2, 5 or every digit): `small digits` labels them with a small digit (2, 5), `complete` with the full value in the tick font, with `tickprefix`/`ticksuffix` (20, 50, 200), `none` leaves them unlabelled.",
          "valType": "enumerated"
        },
        "ticklabelshift": {
          "dflt": 0,
          "editType": "layout+ticks",
          "description": "Shift of tick labels along the axis, in px.",
          "valType": "integer"
        },
        "ticklabelstandoff": {
          "dflt": 0,
          "editType": "layout+ticks",
          "description": "Extra distance between tick labels and ticks, in px.",
          "valType": "integer"
        },
        "categoryorder": {
          "values": [
            "trace",
            "category ascending",
            "category descending",
            "array",
            "total ascending",
            "total descending",
            "min ascending",
            "min descending",
            "max ascending",
            "max descending",
            "sum ascending",
            "sum descending",
            "mean ascending",
            "mean descending",
            "median ascending",
            "median descending"
          ],
          "editType": "calc",
          "description": "Order of categories: as they first appear in the traces (`trace`), alphabetical/numerical (`category ascending|descending`), `categoryarray` first (`array`), or by an aggregate of the trace values per category (`total`, `min`, `max`, `sum`, `mean`, `median`). Defaults to `array` when `categoryarray` is set, else `trace`.",
          "valType": "enumerated"
        },
        "categoryarray": {
          "editType": "calc",
          "description": "Category order for `categoryorder: array`. Categories not listed follow in trace order.",
          "valType": "data_array"
        },
        "showdividers": {
          "dflt": true,
          "editType": "ticks",
          "description": "Multicategory axes: draw divider lines between groups.",
          "valType": "boolean"
        },
        "dividercolor": {
          "editType": "ticks",
          "description": "Multicategory divider color. Defaults to `color`.",
          "valType": "color"
        },
        "dividerwidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Multicategory divider width in px.",
          "valType": "number"
        },
        "showline": {
          "dflt": false,
          "editType": "layout+ticks+plot",
          "description": "Draw the axis line.",
          "valType": "boolean"
        },
        "linecolor": {
          "editType": "ticks",
          "description": "Axis line color. Defaults to `color`.",
          "valType": "color"
        },
        "linewidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Axis line width in px.",
          "valType": "number"
        },
        "mirror": {
          "values": [true, "ticks", false, "all", "allticks"],
          "dflt": false,
          "editType": "layout+ticks+plot",
          "description": "Repeat the axis line on the opposite side of the plot area: `true` (line), `ticks` (line and ticks); `all`/`allticks` do the same on every subplot sharing this axis.",
          "valType": "enumerated"
        },
        "ticks": {
          "values": ["outside", "inside", ""],
          "dflt": "",
          "editType": "layout+ticks+plot",
          "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
          "valType": "enumerated"
        },
        "ticklen": {
          "min": 0,
          "dflt": 5,
          "editType": "layout+ticks",
          "description": "Tick length in px.",
          "valType": "number"
        },
        "tickwidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Tick width in px.",
          "valType": "number"
        },
        "tickcolor": {
          "editType": "ticks",
          "description": "Tick color. Defaults to `color`.",
          "valType": "color"
        },
        "showgrid": {
          "dflt": true,
          "editType": "ticks",
          "description": "Draw grid lines at each tick.",
          "valType": "boolean"
        },
        "gridcolor": {
          "dflt": "#eee",
          "editType": "ticks",
          "description": "Grid line color.",
          "valType": "color"
        },
        "gridwidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Grid line width in px.",
          "valType": "number"
        },
        "griddash": {
          "dflt": "solid",
          "editType": "ticks",
          "description": "Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a CSS-like list of dash lengths in px (`5px,10px,2px,2px`).",
          "valType": "string"
        },
        "zeroline": {
          "dflt": true,
          "editType": "ticks",
          "description": "Draw a line at 0 (linear axes whose range contains 0).",
          "valType": "boolean"
        },
        "zerolinecolor": {
          "editType": "ticks",
          "description": "Zero line color. Defaults to `color`.",
          "valType": "color"
        },
        "zerolinewidth": {
          "min": 0,
          "dflt": 1,
          "editType": "ticks",
          "description": "Zero line width in px.",
          "valType": "number"
        },
        "showspikes": {
          "editType": "modebar",
          "description": "Draw a spike line from the hovered point to this axis. Defaults to `false`, or `true` when any other `spike*` attribute is set or `hovermode` is this axis' unified mode (`x unified` for x axes).",
          "valType": "boolean"
        },
        "spikecolor": {
          "editType": "none",
          "description": "Spike line color. Defaults to the hovered point's color (or a contrasting color when that is too close to the background).",
          "valType": "color"
        },
        "spikethickness": {
          "dflt": 3,
          "editType": "none",
          "description": "Spike line width in px (1.5 in unified hover).",
          "valType": "number"
        },
        "spikedash": {
          "dflt": "dash",
          "editType": "none",
          "description": "Spike line dash (`dot` in unified hover). Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a CSS-like list of dash lengths in px (`5px,10px,2px,2px`).",
          "valType": "string"
        },
        "spikemode": {
          "flags": ["toaxis", "across", "marker"],
          "dflt": "toaxis",
          "editType": "none",
          "description": "`toaxis`: from the point to the axis; `across`: across the whole plot area; `marker`: a dot on the axis. Combine with `+` (`across+marker`). Unified hover defaults to `across`.",
          "valType": "flaglist"
        },
        "spikesnap": {
          "values": ["data", "cursor", "hovered data"],
          "dflt": "hovered data",
          "editType": "none",
          "description": "`hovered data`: the spike follows the hovered point; `data`: the closest point within `spikedistance`, even when no label shows; `cursor`: the pointer position.",
          "valType": "enumerated"
        },
        "minor": {
          "editType": "ticks",
          "description": "Minor ticks and grid lines between the major ticks.",
          "role": "object",
          "tickmode": {
            "values": ["auto", "linear", "array"],
            "description": "As the major `tickmode`. Defaults to `array` when `minor.tickvals` is set, `linear` when `minor.dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 5,
            "description": "Maximum number of minor ticks per major interval for `tickmode: auto` (0 picks it from the axis length).",
            "valType": "integer"
          },
          "tick0": {
            "description": "As the major `tick0`. Defaults to the major `tick0`.",
            "valType": "any"
          },
          "dtick": {
            "description": "Minor tick step. Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "description": "Minor tick positions for `tickmode: array`.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "description": "Draw minor tick marks outside or inside the plot area, or not at all.",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "description": "Minor tick length in px. Defaults to 60% of `ticklen`.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "description": "Minor tick width in px. Defaults to `tickwidth`.",
            "valType": "number"
          },
          "tickcolor": {
            "description": "Minor tick color. Defaults to `tickcolor`.",
            "valType": "color"
          },
          "showgrid": {
            "dflt": false,
            "description": "Draw minor grid lines.",
            "valType": "boolean"
          },
          "gridcolor": {
            "description": "Minor grid color. Defaults to `gridcolor` blended halfway to the plot background.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "description": "Minor grid width in px. Defaults to `gridwidth`.",
            "valType": "number"
          },
          "griddash": {
            "description": "Minor grid dash style. Defaults to `griddash`. Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a CSS-like list of dash lengths in px (`5px,10px,2px,2px`).",
            "valType": "string"
          }
        },
        "title": {
          "editType": "layout+ticks+plot",
          "description": "Axis title.",
          "role": "object",
          "text": {
            "dflt": "",
            "description": "Axis title text (supports rich-text tags, E2.10).",
            "valType": "string"
          },
          "font": {
            "description": "Axis title font. Defaults to `layout.font` with 1.2× size.",
            "editType": "layout+ticks+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "standoff": {
            "min": 0,
            "description": "Distance in px between the tick labels and the title. By default it follows the tick labels automatically.",
            "valType": "number"
          }
        }
      },
      "selections": {
        "editType": "plot",
        "description": "Selections as layout objects (plan E5.12): each box or lasso drag in `select` / `lasso` mode adds one (shift keeps the others), and every selection on a subplot selects the points inside it (`selectedpoints` follows). Set them to restore a selection; drag one to move or resize it; a double-click clears them.",
        "itemName": "selection",
        "role": "items",
        "items": {
          "role": "object",
          "visible": {
            "dflt": true,
            "description": "Whether this selection applies (set to `false` by the template machinery when `templateitemname` names no template selection).",
            "valType": "boolean"
          },
          "type": {
            "values": ["rect", "path"],
            "description": "`rect`: the box from (`x0`, `y0`) to (`x1`, `y1`); `path`: the polygon `path` (lasso). Default: `path` when `path` is set, else `rect`.",
            "valType": "enumerated"
          },
          "xref": {
            "dflt": "x",
            "description": "The x axis the coordinates refer to (`x`, `x2`, …).",
            "valType": "subplotid"
          },
          "yref": {
            "dflt": "y",
            "description": "The y axis the coordinates refer to (`y`, `y2`, …).",
            "valType": "subplotid"
          },
          "x0": {
            "description": "Start x of a `rect`, in data units of `xref` (dates, category names or indices; data values on log axes). A `rect` needs all four of `x0`, `x1`, `y0`, `y1`.",
            "valType": "any"
          },
          "x1": {
            "description": "End x of a `rect`.",
            "valType": "any"
          },
          "y0": {
            "description": "Start y of a `rect`.",
            "valType": "any"
          },
          "y1": {
            "description": "End y of a `rect`.",
            "valType": "any"
          },
          "path": {
            "description": "Polygon of a `path` selection, SVG-like in data units: `M x,y L x,y … Z` (also `H`, `V` and relative commands). Dates use `_` between date and time (`2024-01-05_12:00`).",
            "valType": "string"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 0.7,
            "description": "Opacity of the outline.",
            "valType": "number"
          },
          "line": {
            "description": "Outline style.",
            "role": "object",
            "color": {
              "description": "Outline color. Default: a color contrasting with `plot_bgcolor` (white on dark, `#444` on light).",
              "valType": "color"
            },
            "width": {
              "min": 1,
              "dflt": 1,
              "description": "Outline width, px.",
              "valType": "number"
            },
            "dash": {
              "dflt": "dot",
              "description": "Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot` or a px list (`'5px,10px'`).",
              "valType": "string"
            }
          },
          "name": {
            "editType": "none",
            "description": "Name of this selection, used to reference it from a template via `templateitemname`.",
            "valType": "string"
          },
          "templateitemname": {
            "editType": "plot",
            "description": "Name of a template selection to inherit from. If no template item matches, this selection is hidden (`visible: false`).",
            "valType": "string"
          }
        }
      },
      "colorscale": {
        "editType": "style",
        "description": "The automatic colorscales (`autocolorscale`), usually set by a template.",
        "role": "object",
        "sequential": {
          "dflt": "Reds",
          "editType": "style",
          "description": "Colorscale for non-negative color domains when `autocolorscale` is on (Plotly default `Reds`).",
          "valType": "colorscale"
        },
        "sequentialminus": {
          "dflt": "Blues",
          "editType": "style",
          "description": "Colorscale for non-positive color domains when `autocolorscale` is on (Plotly default `Blues`).",
          "valType": "colorscale"
        },
        "diverging": {
          "dflt": "RdBu",
          "editType": "style",
          "description": "Colorscale for color domains that cross 0 when `autocolorscale` is on (Plotly default `RdBu`).",
          "valType": "colorscale"
        }
      },
      "colorscaleInterpolation": {
        "values": ["rgb", "oklab", "lab", "hcl"],
        "dflt": "rgb",
        "editType": "style",
        "description": "Color space in which colorscale stops are interpolated: `rgb` (sRGB, as Plotly), `oklab` (perceptually uniform), `lab` (CIE L*a*b*) or `hcl` (CIE LCh, hue along the shorter arc).",
        "valType": "enumerated"
      },
      "coloraxis": {
        "editType": "style",
        "description": "A colorscale and domain shared by every trace container with `coloraxis: 'coloraxis'` (or `coloraxis2`, …).",
        "subplot": "coloraxis",
        "role": "object",
        "colorscale": {
          "editType": "style",
          "description": "Colorscale for numeric `color arrays of the traces that reference this axis` values: a name (`'Viridis'`, `'RdBu'`, …), a list of colors, or `[position, color]` stops from 0 to 1.",
          "valType": "colorscale"
        },
        "autocolorscale": {
          "editType": "style",
          "description": "Pick the colorscale from the sign of the color domain (Reds for ≥ 0, Blues for ≤ 0, RdBu across 0). Defaults to true unless `colorscale` is given.",
          "valType": "boolean"
        },
        "reversescale": {
          "dflt": false,
          "editType": "style",
          "description": "Reverse the colorscale (the lowest value gets the last color).",
          "valType": "boolean"
        },
        "cauto": {
          "editType": "style",
          "description": "Compute the color domain from the numeric `color arrays of the traces that reference this axis` values. Defaults to false when both `cmin` and `cmax` are given.",
          "valType": "boolean"
        },
        "cmin": {
          "editType": "style",
          "description": "Value mapped to the first colorscale color (with `cmax`; turns `cauto` off).",
          "valType": "number"
        },
        "cmax": {
          "editType": "style",
          "description": "Value mapped to the last colorscale color (with `cmin`; turns `cauto` off).",
          "valType": "number"
        },
        "cmid": {
          "editType": "style",
          "description": "With `cauto`, widen the automatic domain so it is symmetric around this value (diverging data).",
          "valType": "number"
        },
        "showscale": {
          "dflt": true,
          "editType": "colorbars",
          "description": "Show a colorbar for this colorscale (drawn by the colorbar component, plan E5.3).",
          "valType": "boolean"
        },
        "colorbar": {
          "editType": "colorbars+layout",
          "description": "The colorbar of this colorscale (plan E5.3).",
          "role": "object",
          "orientation": {
            "values": ["h", "v"],
            "dflt": "v",
            "description": "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).",
            "valType": "enumerated"
          },
          "thicknessmode": {
            "values": ["fraction", "pixels"],
            "dflt": "pixels",
            "description": "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).",
            "valType": "enumerated"
          },
          "thickness": {
            "min": 0,
            "dflt": 30,
            "description": "Thickness of the color bar.",
            "valType": "number"
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).",
            "valType": "number"
          },
          "x": {
            "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).",
            "valType": "number"
          },
          "xref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `x`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "description": "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).",
            "valType": "enumerated"
          },
          "xpad": {
            "min": 0,
            "dflt": 10,
            "description": "Horizontal padding, px.",
            "valType": "number"
          },
          "y": {
            "description": "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).",
            "valType": "number"
          },
          "yref": {
            "values": ["container", "paper"],
            "dflt": "paper",
            "description": "Reference of `y`: the plot area (`paper`) or the whole figure.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).",
            "valType": "enumerated"
          },
          "ypad": {
            "min": 0,
            "dflt": 10,
            "description": "Vertical padding, px.",
            "valType": "number"
          },
          "outlinecolor": {
            "dflt": "#444",
            "description": "Color of the outline around the bar.",
            "valType": "color"
          },
          "outlinewidth": {
            "min": 0,
            "dflt": 1,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "bordercolor": {
            "dflt": "#444",
            "description": "Border color of the colorbar box.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 0,
            "description": "Border width of the box, px.",
            "valType": "number"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Background of the box.",
            "valType": "color"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "colorbars+layout",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "colorbars+layout",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "colorbars+layout",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "colorbars+layout",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "colorbars+layout",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "colorbars+layout",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "colorbars+layout",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "colorbars+layout",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color",
            "dflt": "#444"
          },
          "ticklabelposition": {
            "values": [
              "outside",
              "inside",
              "outside top",
              "inside top",
              "outside bottom",
              "inside bottom",
              "outside left",
              "inside left",
              "outside right",
              "inside right"
            ],
            "dflt": "outside",
            "description": "Tick labels outside the bar (away from it) or inside (over it); `top`/`bottom` (`v`) or `left`/`right` (`h`) move them beside their tick.",
            "valType": "enumerated"
          },
          "ticklabeloverflow": {
            "values": ["allow", "hide past div", "hide past domain"],
            "description": "Hide labels past the figure or past the bar. Defaults to `hide past domain` for inside labels, else `hide past div`.",
            "valType": "enumerated"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "colorbars+layout",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "colorbars+layout",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "colorbars+layout",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "colorbars+layout",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "colorbars+layout",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "colorbars+layout",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "colorbars+layout",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "colorbars+layout",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "colorbars+layout",
            "description": "Colorbar title.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Colorbar title.",
              "valType": "string"
            },
            "font": {
              "description": "Title font. Defaults to `layout.font` with the tick-label family and 1.2 × its size.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "side": {
              "values": ["right", "top", "bottom"],
              "description": "Where the title goes relative to the bar. Defaults to `top` (`v`) or `right` (`h`).",
              "valType": "enumerated"
            }
          }
        }
      },
      "barmode": {
        "values": ["group", "stack", "relative", "overlay"],
        "dflt": "group",
        "editType": "calc",
        "description": "How bars at the same position combine: side by side (`group`), stacked (`stack`), stacked with negative values below zero (`relative`), or drawn over each other (`overlay`).",
        "valType": "enumerated"
      },
      "barnorm": {
        "values": ["", "fraction", "percent"],
        "dflt": "",
        "editType": "calc",
        "description": "Normalize each position's total to 1 (`fraction`) or 100 (`percent`).",
        "valType": "enumerated"
      },
      "bargap": {
        "min": 0,
        "max": 1,
        "dflt": 0.2,
        "editType": "calc",
        "description": "Gap between bars at neighboring positions, as a fraction of the position slot.",
        "valType": "number"
      },
      "bargroupgap": {
        "min": 0,
        "max": 1,
        "dflt": 0,
        "editType": "calc",
        "description": "Gap between bars of the same position, as a fraction of each bar’s share.",
        "valType": "number"
      },
      "barcornerradius": {
        "editType": "style",
        "description": "Default `marker.cornerradius` of bars: CSS px, or a percentage of the bar width (`'30%'`).",
        "valType": "any"
      },
      "hiddenlabels": {
        "editType": "calc",
        "description": "Labels of pie slices to hide (like `visible: 'legendonly'` for traces), across all pies. Legend clicks on pie items toggle it.",
        "valType": "data_array"
      },
      "piecolorway": {
        "editType": "calc",
        "description": "Default slice colors. Defaults to `layout.colorway`; extended with lighter and darker copies when `extendpiecolors` is on.",
        "valType": "colorlist"
      },
      "extendpiecolors": {
        "dflt": true,
        "editType": "calc",
        "description": "Extend the slice colorway to three times its length: every color 20% lighter, then every color 20% darker. Colors from `marker.colors` are never extended.",
        "valType": "boolean"
      },
      "boxmode": {
        "values": ["group", "overlay"],
        "dflt": "overlay",
        "editType": "calc",
        "description": "How boxes of different traces at the same position combine: side by side (`group`) or drawn over each other (`overlay`).",
        "valType": "enumerated"
      },
      "boxgap": {
        "min": 0,
        "max": 1,
        "dflt": 0.3,
        "editType": "calc",
        "description": "Gap between boxes at neighboring positions, as a fraction of the position slot.",
        "valType": "number"
      },
      "boxgroupgap": {
        "min": 0,
        "max": 1,
        "dflt": 0.3,
        "editType": "calc",
        "description": "Gap between the boxes of one position in `group` mode, as a fraction of each one's share.",
        "valType": "number"
      },
      "funnelmode": {
        "values": ["stack", "group", "overlay"],
        "dflt": "stack",
        "editType": "calc",
        "description": "How funnel bars at the same position combine: side by side (`group`), stacked on top of one another (`stack`), or drawn over each other (`overlay`; lower the `opacity` to see them all). Traces of other types never share their slots.",
        "valType": "enumerated"
      },
      "funnelgap": {
        "min": 0,
        "max": 1,
        "dflt": 0.2,
        "editType": "calc",
        "description": "Gap between funnel bars at neighboring positions, as a fraction of the position slot.",
        "valType": "number"
      },
      "funnelgroupgap": {
        "min": 0,
        "max": 1,
        "dflt": 0,
        "editType": "calc",
        "description": "Gap between funnel bars of the same position, as a fraction of each bar’s share.",
        "valType": "number"
      },
      "funnelareacolorway": {
        "editType": "calc",
        "description": "Default stage colors. Defaults to `layout.colorway`; extended with lighter and darker copies when `extendfunnelareacolors` is on.",
        "valType": "colorlist"
      },
      "extendfunnelareacolors": {
        "dflt": true,
        "editType": "calc",
        "description": "Extend the stage colorway to three times its length: every color 20% lighter, then every color 20% darker. Colors from `marker.colors` are never extended.",
        "valType": "boolean"
      },
      "waterfallmode": {
        "values": ["group", "overlay"],
        "dflt": "group",
        "editType": "calc",
        "description": "How waterfall bars at the same position combine: side by side (`group`) or drawn over each other (`overlay`; lower the `opacity` to see them all). Traces of other types never share their slots.",
        "valType": "enumerated"
      },
      "waterfallgap": {
        "min": 0,
        "max": 1,
        "dflt": 0.2,
        "editType": "calc",
        "description": "Gap between waterfall bars at neighboring positions, as a fraction of the position slot.",
        "valType": "number"
      },
      "waterfallgroupgap": {
        "min": 0,
        "max": 1,
        "dflt": 0,
        "editType": "calc",
        "description": "Gap between waterfall bars of the same position, as a fraction of each bar’s share.",
        "valType": "number"
      },
      "geo": {
        "editType": "plot",
        "description": "A map-projection subplot. `geo2`, `geo3`, … declare more, referenced from geo traces' `geo` (`'geo2'`).",
        "role": "object",
        "subplot": "geo",
        "domain": {
          "editType": "plot",
          "description": "Extent of the geo subplot as fractions of the plot area, or the `layout.grid` cell at `row` / `column`. A map keeps its shape, so at `projection.scale` 1 it fills the width or the height of its domain, rarely both. Subplots without a domain are stacked from the bottom.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "fitbounds": {
          "values": [false, "locations", "geojson"],
          "dflt": "locations",
          "editType": "plot",
          "description": "Fit the view to the data of the subplot's traces: `locations` to the points and locations they show, `geojson` to the whole of their `geojson`, `false` to leave the view as set. The fit sets `center` and `projection.scale`; on a world map also `projection.rotation.lon`, and with a clipped projection (`orthographic`, …) `projection.rotation.lat` and both axis ranges. It is off when the figure sets any of the attributes it would set, and for the projections it cannot fit (`albers usa`, `craig`, `peirce quincuncial`, `satellite`).",
          "valType": "enumerated"
        },
        "resolution": {
          "values": [110, 50],
          "dflt": 110,
          "editType": "plot",
          "description": "Detail of the base layers, as the scale denominator of the map data in millions: 110 (1:110,000,000, coarse) or 50 (1:50,000,000).",
          "valType": "enumerated"
        },
        "scope": {
          "values": [
            "africa",
            "antarctica",
            "asia",
            "europe",
            "north america",
            "oceania",
            "south america",
            "usa",
            "world"
          ],
          "dflt": "world",
          "editType": "plot",
          "description": "The part of the world the base layers cover. A scope other than `world` also sets the default projection, ranges and rotation. `albers usa` maps are always `usa`.",
          "valType": "enumerated"
        },
        "projection": {
          "editType": "plot",
          "description": "How the globe is projected onto the subplot.",
          "role": "object",
          "type": {
            "values": [
              "airy",
              "aitoff",
              "albers",
              "albers usa",
              "august",
              "azimuthal equal area",
              "azimuthal equidistant",
              "baker",
              "bertin1953",
              "boggs",
              "bonne",
              "bottomley",
              "bromley",
              "collignon",
              "conic conformal",
              "conic equal area",
              "conic equidistant",
              "craig",
              "craster",
              "cylindrical equal area",
              "cylindrical stereographic",
              "eckert1",
              "eckert2",
              "eckert3",
              "eckert4",
              "eckert5",
              "eckert6",
              "eisenlohr",
              "equal earth",
              "equirectangular",
              "fahey",
              "foucaut",
              "foucaut sinusoidal",
              "ginzburg4",
              "ginzburg5",
              "ginzburg6",
              "ginzburg8",
              "ginzburg9",
              "globe3d",
              "gnomonic",
              "gringorten",
              "gringorten quincuncial",
              "guyou",
              "hammer",
              "hill",
              "homolosine",
              "hufnagel",
              "hyperelliptical",
              "kavrayskiy7",
              "lagrange",
              "larrivee",
              "laskowski",
              "loximuthal",
              "mercator",
              "miller",
              "mollweide",
              "mt flat polar parabolic",
              "mt flat polar quartic",
              "mt flat polar sinusoidal",
              "natural earth",
              "natural earth1",
              "natural earth2",
              "nell hammer",
              "nicolosi",
              "orthographic",
              "patterson",
              "peirce quincuncial",
              "polyconic",
              "rectangular polyconic",
              "robinson",
              "satellite",
              "sinu mollweide",
              "sinusoidal",
              "stereographic",
              "times",
              "transverse mercator",
              "van der grinten",
              "van der grinten2",
              "van der grinten3",
              "van der grinten4",
              "wagner4",
              "wagner6",
              "wiechel",
              "winkel tripel",
              "winkel3"
            ],
            "editType": "plot",
            "description": "The map projection. Defaults to the scope's: `equirectangular` for the world, `albers usa` for `usa`, a conic or Mercator projection for the continents. The values are Plotly's, and `globe3d`, a Holochart extra: a 3D globe with the view of `orthographic`.",
            "valType": "enumerated"
          },
          "rotation": {
            "editType": "plot",
            "description": "Rotation of the globe before it is projected. `albers usa` has none.",
            "role": "object",
            "lon": {
              "editType": "plot",
              "description": "Longitude at the center of the projection, in degrees east: turns the globe about its axis. Defaults to the middle of `lonaxis.range`.",
              "valType": "number"
            },
            "lat": {
              "editType": "plot",
              "description": "Latitude at the center of the projection, in degrees north: tips the globe towards the viewer.",
              "valType": "number"
            },
            "roll": {
              "editType": "plot",
              "description": "Turn of the map about the line of sight, in degrees (180 draws it upside down).",
              "valType": "number"
            }
          },
          "tilt": {
            "dflt": 0,
            "editType": "plot",
            "description": "`satellite` only: tilt of the view away from straight down, in degrees.",
            "valType": "number"
          },
          "distance": {
            "min": 1.001,
            "dflt": 2,
            "editType": "plot",
            "description": "`satellite` only: distance of the viewpoint from the globe's center, in globe radii (above 1: outside the surface).",
            "valType": "number"
          },
          "parallels": {
            "items": [
              {
                "editType": "plot",
                "valType": "number"
              },
              {
                "editType": "plot",
                "valType": "number"
              }
            ],
            "editType": "plot",
            "description": "Conic projections only: the two standard parallels, in degrees, where the cone meets the globe. Defaults to the scope's, or `[0, 60]`.",
            "valType": "info_array"
          },
          "scale": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Zoom factor. At 1 the `lonaxis` / `lataxis` ranges are fitted into the domain.",
            "valType": "number"
          },
          "minscale": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Lower limit of zooming by hand, as a `projection.scale` value (0.5: out to half the fitted size). 0 sets no limit.",
            "valType": "number"
          },
          "maxscale": {
            "min": 0,
            "editType": "plot",
            "description": "Upper limit of zooming by hand, as a `projection.scale` value (2: in to twice the fitted size). Unset sets no limit.",
            "valType": "number"
          }
        },
        "center": {
          "editType": "plot",
          "description": "The point of the map at the middle of the subplot (panning moves it).",
          "role": "object",
          "lon": {
            "editType": "plot",
            "description": "Longitude at the middle of the subplot, in degrees. Defaults to the middle of `lonaxis.range` on a scoped map and to `projection.rotation.lon` on a world map.",
            "valType": "number"
          },
          "lat": {
            "editType": "plot",
            "description": "Latitude at the middle of the subplot, in degrees. Defaults to the middle of `lataxis.range`.",
            "valType": "number"
          }
        },
        "visible": {
          "dflt": true,
          "editType": "plot",
          "description": "Default of the base layers and the graticule: `false` hides all of them (also those a template shows) unless the figure shows one itself.",
          "valType": "boolean"
        },
        "showcoastlines": {
          "editType": "plot",
          "description": "Draw the coastlines. On by default on world maps.",
          "valType": "boolean"
        },
        "coastlinecolor": {
          "dflt": "#444",
          "editType": "plot",
          "description": "Color of the coastlines.",
          "valType": "color"
        },
        "coastlinewidth": {
          "min": 0,
          "dflt": 1,
          "editType": "plot",
          "description": "Line width of the coastlines, px.",
          "valType": "number"
        },
        "showland": {
          "dflt": false,
          "editType": "plot",
          "description": "Fill the land.",
          "valType": "boolean"
        },
        "landcolor": {
          "dflt": "#F0DC82",
          "editType": "plot",
          "description": "Fill color of the land.",
          "valType": "color"
        },
        "showocean": {
          "dflt": false,
          "editType": "plot",
          "description": "Fill the oceans.",
          "valType": "boolean"
        },
        "oceancolor": {
          "dflt": "#3399FF",
          "editType": "plot",
          "description": "Fill color of the oceans.",
          "valType": "color"
        },
        "showlakes": {
          "dflt": false,
          "editType": "plot",
          "description": "Fill the lakes.",
          "valType": "boolean"
        },
        "lakecolor": {
          "dflt": "#3399FF",
          "editType": "plot",
          "description": "Fill color of the lakes.",
          "valType": "color"
        },
        "showrivers": {
          "dflt": false,
          "editType": "plot",
          "description": "Draw the rivers.",
          "valType": "boolean"
        },
        "rivercolor": {
          "dflt": "#3399FF",
          "editType": "plot",
          "description": "Color of the rivers.",
          "valType": "color"
        },
        "riverwidth": {
          "min": 0,
          "dflt": 1,
          "editType": "plot",
          "description": "Line width of the rivers, px.",
          "valType": "number"
        },
        "showcountries": {
          "editType": "plot",
          "description": "Draw the borders between countries. On by default on scoped maps other than `usa`.",
          "valType": "boolean"
        },
        "countrycolor": {
          "dflt": "#444",
          "editType": "plot",
          "description": "Color of the country borders.",
          "valType": "color"
        },
        "countrywidth": {
          "min": 0,
          "dflt": 1,
          "editType": "plot",
          "description": "Line width of the country borders, px.",
          "valType": "number"
        },
        "showsubunits": {
          "editType": "plot",
          "description": "Draw the borders inside countries (states, provinces). The map data has them for `usa`, and for `north america` at `resolution` 50; on by default there, never drawn elsewhere.",
          "valType": "boolean"
        },
        "subunitcolor": {
          "dflt": "#444",
          "editType": "plot",
          "description": "Color of the subunit borders.",
          "valType": "color"
        },
        "subunitwidth": {
          "min": 0,
          "dflt": 1,
          "editType": "plot",
          "description": "Line width of the subunit borders, px.",
          "valType": "number"
        },
        "showframe": {
          "editType": "plot",
          "description": "Draw the outline of the projected globe. World maps only, where it is on by default.",
          "valType": "boolean"
        },
        "framecolor": {
          "dflt": "#444",
          "editType": "plot",
          "description": "Color of the frame.",
          "valType": "color"
        },
        "framewidth": {
          "min": 0,
          "dflt": 1,
          "editType": "plot",
          "description": "Line width of the frame, px.",
          "valType": "number"
        },
        "bgcolor": {
          "dflt": "#fff",
          "editType": "plot",
          "description": "Background color of the map, inside its frame.",
          "valType": "color"
        },
        "lonaxis": {
          "editType": "plot",
          "description": "The longitude axis of a geo subplot: its range and its graticule lines.",
          "role": "object",
          "range": {
            "items": [
              {
                "editType": "plot",
                "valType": "number"
              },
              {
                "editType": "plot",
                "valType": "number"
              }
            ],
            "editType": "plot",
            "description": "The longitudes in view, `[start, end]` in degrees: the map is fitted to this range and clipped to it. Defaults to the scope's range, or to the widest span the projection can show around `projection.rotation.lon`.",
            "valType": "info_array"
          },
          "showgrid": {
            "dflt": false,
            "editType": "plot",
            "description": "Draw the meridians of the graticule.",
            "valType": "boolean"
          },
          "tick0": {
            "dflt": 0,
            "editType": "plot",
            "description": "A longitude one of the meridians passes through, in degrees.",
            "valType": "number"
          },
          "dtick": {
            "editType": "plot",
            "description": "Step between the meridians, in degrees. Defaults to 30.",
            "valType": "number"
          },
          "gridcolor": {
            "dflt": "#eee",
            "editType": "plot",
            "description": "Color of the meridians.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Line width of the meridians, px.",
            "valType": "number"
          },
          "griddash": {
            "dflt": "solid",
            "editType": "plot",
            "description": "Dash style of the meridians: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a list of dash lengths in px (`5px,10px`).",
            "valType": "string"
          }
        },
        "lataxis": {
          "editType": "plot",
          "description": "The latitude axis of a geo subplot: its range and its graticule lines.",
          "role": "object",
          "range": {
            "items": [
              {
                "editType": "plot",
                "valType": "number"
              },
              {
                "editType": "plot",
                "valType": "number"
              }
            ],
            "editType": "plot",
            "description": "The latitudes in view, `[start, end]` in degrees: the map is fitted to this range and clipped to it. Defaults to the scope's range, or to the widest span the projection can show around `projection.rotation.lat`.",
            "valType": "info_array"
          },
          "showgrid": {
            "dflt": false,
            "editType": "plot",
            "description": "Draw the parallels of the graticule.",
            "valType": "boolean"
          },
          "tick0": {
            "dflt": 0,
            "editType": "plot",
            "description": "A latitude one of the parallels passes through, in degrees.",
            "valType": "number"
          },
          "dtick": {
            "editType": "plot",
            "description": "Step between the parallels, in degrees. Defaults to 10.",
            "valType": "number"
          },
          "gridcolor": {
            "dflt": "#eee",
            "editType": "plot",
            "description": "Color of the parallels.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Line width of the parallels, px.",
            "valType": "number"
          },
          "griddash": {
            "dflt": "solid",
            "editType": "plot",
            "description": "Dash style of the parallels: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a list of dash lengths in px (`5px,10px`).",
            "valType": "string"
          }
        },
        "uirevision": {
          "editType": "none",
          "description": "Persistence of user-driven changes of the view (rotation, center and scale). Defaults to `layout.uirevision`.",
          "valType": "any"
        }
      },
      "iciclecolorway": {
        "editType": "calc",
        "description": "Default colors of the first-level icicle nodes (deeper nodes take their parent's). Defaults to `layout.colorway`; extended with lighter and darker copies when `extendiciclecolors` is on.",
        "valType": "colorlist"
      },
      "extendiciclecolors": {
        "dflt": true,
        "editType": "calc",
        "description": "Extend `iciclecolorway` to three times its length: every color 20% lighter, then every color 20% darker. Colors from `marker.colors` are never extended.",
        "valType": "boolean"
      },
      "sunburstcolorway": {
        "editType": "calc",
        "description": "Default colors of the first-level sunburst nodes (deeper nodes take their parent's). Defaults to `layout.colorway`; extended with lighter and darker copies when `extendsunburstcolors` is on.",
        "valType": "colorlist"
      },
      "extendsunburstcolors": {
        "dflt": true,
        "editType": "calc",
        "description": "Extend `sunburstcolorway` to three times its length: every color 20% lighter, then every color 20% darker. Colors from `marker.colors` are never extended.",
        "valType": "boolean"
      },
      "treemapcolorway": {
        "editType": "calc",
        "description": "Default colors of the first-level treemap nodes (deeper nodes take their parent's). Defaults to `layout.colorway`; extended with lighter and darker copies when `extendtreemapcolors` is on.",
        "valType": "colorlist"
      },
      "extendtreemapcolors": {
        "dflt": true,
        "editType": "calc",
        "description": "Extend `treemapcolorway` to three times its length: every color 20% lighter, then every color 20% darker. Colors from `marker.colors` are never extended.",
        "valType": "boolean"
      },
      "polar": {
        "editType": "calc",
        "description": "A polar subplot. `polar2`, `polar3`, … declare more, referenced from polar traces' `subplot` (`'polar2'`).",
        "role": "object",
        "subplot": "polar",
        "domain": {
          "editType": "plot",
          "description": "Extent of the polar subplot as fractions of the plot area, or the `layout.grid` cell at `row` / `column`. The subplot is the largest circle (or sector) that fits in it, centered.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "sector": {
          "items": [
            {
              "editType": "plot",
              "valType": "number"
            },
            {
              "editType": "plot",
              "valType": "number"
            }
          ],
          "dflt": [0, 360],
          "editType": "plot",
          "description": "Angular span `[start, end]` of the subplot in degrees, counterclockwise from 3 o’clock (`[0, 180]`: the upper half).",
          "valType": "info_array"
        },
        "hole": {
          "min": 0,
          "max": 1,
          "dflt": 0,
          "editType": "plot",
          "description": "Fraction of the radius cut out of the middle.",
          "valType": "number"
        },
        "bgcolor": {
          "dflt": "#fff",
          "editType": "plot",
          "description": "Background color of the subplot.",
          "valType": "color"
        },
        "gridshape": {
          "values": ["circular", "linear"],
          "dflt": "circular",
          "editType": "plot",
          "description": "Radial grid lines and the angular axis line as circles (`circular`) or polygons through the category angles (`linear`: radar charts). Category angular axes only.",
          "valType": "enumerated"
        },
        "radialaxis": {
          "editType": "calc",
          "description": "The radial axis of a polar subplot.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis (line, ticks, labels and grid).",
            "valType": "boolean"
          },
          "showline": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis line.",
            "valType": "boolean"
          },
          "showgrid": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the grid lines.",
            "valType": "boolean"
          },
          "color": {
            "dflt": "#444",
            "editType": "plot",
            "description": "Base color of the axis: the default for `linecolor`, `tickcolor`, `zerolinecolor`, `dividercolor` and (when changed) the tick-label and title font colors.",
            "valType": "color"
          },
          "linecolor": {
            "editType": "plot",
            "description": "Axis line color. Defaults to `color`.",
            "valType": "color"
          },
          "linewidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Axis line width in px.",
            "valType": "number"
          },
          "gridcolor": {
            "dflt": "#eee",
            "editType": "plot",
            "description": "Grid line color.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Grid line width in px.",
            "valType": "number"
          },
          "griddash": {
            "dflt": "solid",
            "editType": "plot",
            "description": "Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a CSS-like list of dash lengths in px (`5px,10px,2px,2px`).",
            "valType": "string"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "plot",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "plot",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "plot",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "plot",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "plot",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "plot",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "plot",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "plot",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "plot",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "plot",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "minorloglabels": {
            "values": ["small digits", "complete", "none"],
            "dflt": "small digits",
            "editType": "plot",
            "description": "Log axes whose automatic ticks fall between powers of ten (2, 5 or every digit): `small digits` labels them with a small digit (2, 5), `complete` with the full value in the tick font, with `tickprefix`/`ticksuffix` (20, 50, 200), `none` leaves them unlabelled.",
            "valType": "enumerated"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "plot",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "plot",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "plot",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string",
              "editType": "plot"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number",
              "editType": "plot"
            },
            "color": {
              "description": "Text color.",
              "valType": "color",
              "editType": "plot"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer",
              "editType": "plot"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist",
              "editType": "plot"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string",
              "editType": "plot"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "plot",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickformatstops": {
            "editType": "plot",
            "description": "Zoom-dependent tick formats: the first enabled stop whose `dtickrange` contains the current tick step replaces `tickformat`.",
            "itemName": "tickformatstop",
            "role": "items",
            "items": {
              "editType": "plot",
              "role": "object",
              "enabled": {
                "dflt": true,
                "description": "Whether this stop is used.",
                "valType": "boolean",
                "editType": "plot"
              },
              "visible": {
                "dflt": true,
                "description": "Set to `false` (by the template machinery) when `templateitemname` names no template stop; hidden stops are ignored like disabled ones.",
                "valType": "boolean",
                "editType": "plot"
              },
              "dtickrange": {
                "items": [
                  {
                    "dflt": null,
                    "valType": "any"
                  },
                  {
                    "dflt": null,
                    "valType": "any"
                  }
                ],
                "description": "Range `[min, max]` of the tick step (`dtick`) this format applies to; `null` for an open end. Date steps are in ms or `M<n>`.",
                "valType": "info_array",
                "editType": "plot"
              },
              "value": {
                "dflt": "",
                "description": "The `tickformat` to use while the tick step is inside `dtickrange`.",
                "valType": "string",
                "editType": "plot"
              },
              "name": {
                "editType": "plot",
                "description": "Name of this tickformatstop, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template tickformatstop to inherit from. If no template item matches, this tickformatstop is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "layer": {
            "values": ["above traces", "below traces"],
            "dflt": "above traces",
            "editType": "plot",
            "description": "Draw the axis line, ticks and labels above or below the traces. Grid lines are always below.",
            "valType": "enumerated"
          },
          "autotypenumbers": {
            "values": ["convert types", "strict"],
            "dflt": "convert types",
            "editType": "calc",
            "description": "How type detection treats numeric strings: `convert types` counts `'12'` as a number; `strict` counts only real numbers, so numeric strings make a `category` axis.",
            "valType": "enumerated"
          },
          "categoryorder": {
            "values": [
              "trace",
              "category ascending",
              "category descending",
              "array",
              "total ascending",
              "total descending",
              "min ascending",
              "min descending",
              "max ascending",
              "max descending",
              "sum ascending",
              "sum descending",
              "mean ascending",
              "mean descending",
              "median ascending",
              "median descending"
            ],
            "editType": "calc",
            "description": "Order of categories: as they first appear in the traces (`trace`), alphabetical/numerical (`category ascending|descending`), `categoryarray` first (`array`), or by an aggregate of the trace values per category (`total`, `min`, `max`, `sum`, `mean`, `median`). Defaults to `array` when `categoryarray` is set, else `trace`.",
            "valType": "enumerated"
          },
          "categoryarray": {
            "editType": "calc",
            "description": "Category order for `categoryorder: array`. Categories not listed follow in trace order.",
            "valType": "data_array"
          },
          "hoverformat": {
            "dflt": "",
            "editType": "none",
            "description": "Format of this axis’ values in hover labels (same syntax as `tickformat`). Empty uses the tick format with extra precision.",
            "valType": "string"
          },
          "uirevision": {
            "editType": "none",
            "description": "Persistence of user-driven changes of this axis (range, angle, rotation). Defaults to the subplot `uirevision`.",
            "valType": "any"
          },
          "type": {
            "values": ["-", "linear", "log", "date", "category"],
            "dflt": "-",
            "editType": "calc",
            "description": "Radial axis type. `'-'` detects it from the `r` data of the first trace on the subplot.",
            "valType": "enumerated"
          },
          "autorange": {
            "values": [true, false, "reversed", "min reversed", "max reversed", "min", "max"],
            "dflt": true,
            "editType": "plot",
            "description": "Whether the range is computed from the data. `reversed` autoranges with the axis flipped. `min`/`max` autorange only that end and take the other from `range` (`min reversed`/`max reversed` also flip the axis). Defaults to `false` when a full `range` is given, to `min`/`max` when one end of `range` is `null`, and to `reversed` on a y axis only `image` traces use (row 0 at the top, as in Plotly).",
            "valType": "enumerated"
          },
          "autorangeoptions": {
            "editType": "plot",
            "description": "Constraints applied to the computed autorange.",
            "role": "object",
            "minallowed": {
              "description": "The autoranged minimum is exactly this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "maxallowed": {
              "description": "The autoranged maximum is exactly this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "clipmin": {
              "description": "The autoranged minimum is at least this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "clipmax": {
              "description": "The autoranged maximum is at most this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "include": {
              "arrayOk": true,
              "description": "Value(s) the autorange must include (data units).",
              "valType": "any",
              "editType": "plot"
            }
          },
          "range": {
            "items": [
              {
                "dflt": null,
                "valType": "any"
              },
              {
                "dflt": null,
                "valType": "any"
              }
            ],
            "editType": "plot",
            "animatable": true,
            "description": "Visible range `[start, end]` in data units (numbers, dates or category names; exponents on log axes, as in Plotly). Setting it turns `autorange` off; `null` for one end autoranges that end only.",
            "valType": "info_array"
          },
          "minallowed": {
            "editType": "plot",
            "description": "Lowest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
            "valType": "any"
          },
          "maxallowed": {
            "editType": "plot",
            "description": "Highest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
            "valType": "any"
          },
          "autotickangles": {
            "items": {
              "valType": "angle"
            },
            "dflt": [0, 30, 90],
            "editType": "plot",
            "description": "Candidate angles, in order of preference, for `tickangle: auto`.",
            "valType": "info_array"
          },
          "rangemode": {
            "values": ["tozero", "nonnegative", "normal"],
            "dflt": "tozero",
            "editType": "plot",
            "description": "Linear axes only. `tozero`: the autorange extends to 0 whatever the data; `nonnegative`: it stays ≥ 0; `normal`: it follows the data extremes, like a cartesian axis.",
            "valType": "enumerated"
          },
          "angle": {
            "editType": "plot",
            "description": "Angle in degrees (counterclockwise from 3 o’clock) along which the radial axis is drawn. Defaults to the first `sector` angle.",
            "valType": "angle"
          },
          "side": {
            "values": ["clockwise", "counterclockwise"],
            "dflt": "clockwise",
            "editType": "plot",
            "description": "On which side of the radial axis line its ticks and labels are drawn.",
            "valType": "enumerated"
          },
          "title": {
            "editType": "plot",
            "description": "Radial axis title, drawn along the axis.",
            "role": "object",
            "text": {
              "dflt": "",
              "editType": "plot",
              "description": "Radial axis title.",
              "valType": "string"
            },
            "font": {
              "description": "Axis title font. Defaults to `layout.font` with 1.2× size.",
              "editType": "plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string",
                "editType": "plot"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number",
                "editType": "plot"
              },
              "color": {
                "description": "Text color.",
                "valType": "color",
                "editType": "plot"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer",
                "editType": "plot"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist",
                "editType": "plot"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string",
                "editType": "plot"
              }
            }
          }
        },
        "angularaxis": {
          "editType": "calc",
          "description": "The angular axis of a polar subplot.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis (line, ticks, labels and grid).",
            "valType": "boolean"
          },
          "showline": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis line.",
            "valType": "boolean"
          },
          "showgrid": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the grid lines.",
            "valType": "boolean"
          },
          "color": {
            "dflt": "#444",
            "editType": "plot",
            "description": "Base color of the axis: the default for `linecolor`, `tickcolor`, `zerolinecolor`, `dividercolor` and (when changed) the tick-label and title font colors.",
            "valType": "color"
          },
          "linecolor": {
            "editType": "plot",
            "description": "Axis line color. Defaults to `color`.",
            "valType": "color"
          },
          "linewidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Axis line width in px.",
            "valType": "number"
          },
          "gridcolor": {
            "dflt": "#eee",
            "editType": "plot",
            "description": "Grid line color.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Grid line width in px.",
            "valType": "number"
          },
          "griddash": {
            "dflt": "solid",
            "editType": "plot",
            "description": "Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot`, or a CSS-like list of dash lengths in px (`5px,10px,2px,2px`).",
            "valType": "string"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "plot",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "plot",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "plot",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "plot",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "plot",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "plot",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "plot",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "plot",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color"
          },
          "ticklabelstep": {
            "min": 1,
            "dflt": 1,
            "editType": "plot",
            "description": "Label every n-th tick only (`tickmode` `auto` and `linear`).",
            "valType": "integer"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "plot",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "minorloglabels": {
            "values": ["small digits", "complete", "none"],
            "dflt": "small digits",
            "editType": "plot",
            "description": "Log axes whose automatic ticks fall between powers of ten (2, 5 or every digit): `small digits` labels them with a small digit (2, 5), `complete` with the full value in the tick font, with `tickprefix`/`ticksuffix` (20, 50, 200), `none` leaves them unlabelled.",
            "valType": "enumerated"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "plot",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "plot",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "plot",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string",
              "editType": "plot"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number",
              "editType": "plot"
            },
            "color": {
              "description": "Text color.",
              "valType": "color",
              "editType": "plot"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer",
              "editType": "plot"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist",
              "editType": "plot"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string",
              "editType": "plot"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickformat": {
            "dflt": "",
            "editType": "plot",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickformatstops": {
            "editType": "plot",
            "description": "Zoom-dependent tick formats: the first enabled stop whose `dtickrange` contains the current tick step replaces `tickformat`.",
            "itemName": "tickformatstop",
            "role": "items",
            "items": {
              "editType": "plot",
              "role": "object",
              "enabled": {
                "dflt": true,
                "description": "Whether this stop is used.",
                "valType": "boolean",
                "editType": "plot"
              },
              "visible": {
                "dflt": true,
                "description": "Set to `false` (by the template machinery) when `templateitemname` names no template stop; hidden stops are ignored like disabled ones.",
                "valType": "boolean",
                "editType": "plot"
              },
              "dtickrange": {
                "items": [
                  {
                    "dflt": null,
                    "valType": "any"
                  },
                  {
                    "dflt": null,
                    "valType": "any"
                  }
                ],
                "description": "Range `[min, max]` of the tick step (`dtick`) this format applies to; `null` for an open end. Date steps are in ms or `M<n>`.",
                "valType": "info_array",
                "editType": "plot"
              },
              "value": {
                "dflt": "",
                "description": "The `tickformat` to use while the tick step is inside `dtickrange`.",
                "valType": "string",
                "editType": "plot"
              },
              "name": {
                "editType": "plot",
                "description": "Name of this tickformatstop, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template tickformatstop to inherit from. If no template item matches, this tickformatstop is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "layer": {
            "values": ["above traces", "below traces"],
            "dflt": "above traces",
            "editType": "plot",
            "description": "Draw the axis line, ticks and labels above or below the traces. Grid lines are always below.",
            "valType": "enumerated"
          },
          "autotypenumbers": {
            "values": ["convert types", "strict"],
            "dflt": "convert types",
            "editType": "calc",
            "description": "How type detection treats numeric strings: `convert types` counts `'12'` as a number; `strict` counts only real numbers, so numeric strings make a `category` axis.",
            "valType": "enumerated"
          },
          "categoryorder": {
            "values": [
              "trace",
              "category ascending",
              "category descending",
              "array",
              "total ascending",
              "total descending",
              "min ascending",
              "min descending",
              "max ascending",
              "max descending",
              "sum ascending",
              "sum descending",
              "mean ascending",
              "mean descending",
              "median ascending",
              "median descending"
            ],
            "editType": "calc",
            "description": "Order of categories: as they first appear in the traces (`trace`), alphabetical/numerical (`category ascending|descending`), `categoryarray` first (`array`), or by an aggregate of the trace values per category (`total`, `min`, `max`, `sum`, `mean`, `median`). Defaults to `array` when `categoryarray` is set, else `trace`.",
            "valType": "enumerated"
          },
          "categoryarray": {
            "editType": "calc",
            "description": "Category order for `categoryorder: array`. Categories not listed follow in trace order.",
            "valType": "data_array"
          },
          "hoverformat": {
            "dflt": "",
            "editType": "none",
            "description": "Format of this axis’ values in hover labels (same syntax as `tickformat`). Empty uses the tick format with extra precision.",
            "valType": "string"
          },
          "uirevision": {
            "editType": "none",
            "description": "Persistence of user-driven changes of this axis (range, angle, rotation). Defaults to the subplot `uirevision`.",
            "valType": "any"
          },
          "type": {
            "values": ["-", "linear", "category"],
            "dflt": "-",
            "editType": "calc",
            "description": "Angular axis type. `'-'` detects it from the `theta` data of the first trace on the subplot. `linear`: `thetaunit` sets how labels read; `category`: `period` sets how many categories go around the circle.",
            "valType": "enumerated"
          },
          "thetaunit": {
            "values": ["radians", "degrees"],
            "dflt": "degrees",
            "editType": "plot",
            "description": "Unit of the tick labels and hover values of a `linear` angular axis.",
            "valType": "enumerated"
          },
          "period": {
            "min": 0,
            "editType": "plot",
            "description": "Number of category positions around the circle of a `category` angular axis. Defaults to the number of categories.",
            "valType": "number"
          },
          "direction": {
            "values": ["counterclockwise", "clockwise"],
            "dflt": "counterclockwise",
            "editType": "plot",
            "description": "Direction of increasing angles.",
            "valType": "enumerated"
          },
          "rotation": {
            "editType": "plot",
            "description": "Where the angular axis starts, in degrees counterclockwise from 3 o’clock. Defaults to 0 (east) with `direction: counterclockwise` and 90 (north, like a compass) with `clockwise`.",
            "valType": "angle"
          }
        },
        "barmode": {
          "values": ["stack", "overlay"],
          "dflt": "stack",
          "editType": "calc",
          "description": "`barpolar` bars at the same angle: `stack` stacks them outwards, `overlay` draws them over one another (reduce `opacity` to see through).",
          "valType": "enumerated"
        },
        "bargap": {
          "min": 0,
          "max": 1,
          "dflt": 0.1,
          "editType": "calc",
          "description": "Gap between `barpolar` bars at adjacent angles, as a fraction of the smallest angle difference in the data.",
          "valType": "number"
        },
        "uirevision": {
          "editType": "none",
          "description": "Persistence of user-driven changes of the axes (unless they set their own). Defaults to `layout.uirevision`.",
          "valType": "any"
        }
      },
      "violinmode": {
        "values": ["group", "overlay"],
        "dflt": "overlay",
        "editType": "calc",
        "description": "How violines of different traces at the same position combine: side by side (`group`) or drawn over each other (`overlay`).",
        "valType": "enumerated"
      },
      "violingap": {
        "min": 0,
        "max": 1,
        "dflt": 0.3,
        "editType": "calc",
        "description": "Gap between violines at neighboring positions, as a fraction of the position slot.",
        "valType": "number"
      },
      "violingroupgap": {
        "min": 0,
        "max": 1,
        "dflt": 0.3,
        "editType": "calc",
        "description": "Gap between the violines of one position in `group` mode, as a fraction of each one's share.",
        "valType": "number"
      },
      "annotations": {
        "editType": "plot",
        "description": "Text annotations with optional arrows (plan E5.4).",
        "itemName": "annotation",
        "role": "items",
        "items": {
          "role": "object",
          "visible": {
            "dflt": true,
            "description": "Draw this annotation.",
            "valType": "boolean"
          },
          "text": {
            "dflt": "",
            "description": "Text. `<br>` breaks lines; `<b>`/`<i>` around the whole text, `<sup>`/`<sub>` digits and entities are rendered, other tags are dropped until rich text (E2.10).",
            "valType": "string"
          },
          "textangle": {
            "dflt": 0,
            "description": "Rotation of the text box, degrees clockwise.",
            "valType": "angle"
          },
          "font": {
            "description": "Text font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "width": {
            "min": 1,
            "description": "Box width (text area), px. Default: the text width.",
            "valType": "number"
          },
          "height": {
            "min": 1,
            "description": "Box height (text area), px. Default: the text height.",
            "valType": "number"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "description": "Opacity of the whole annotation.",
            "valType": "number"
          },
          "align": {
            "values": ["left", "center", "right"],
            "dflt": "center",
            "description": "Horizontal alignment of the lines inside the box.",
            "valType": "enumerated"
          },
          "valign": {
            "values": ["top", "middle", "bottom"],
            "dflt": "middle",
            "description": "Vertical alignment of the text inside the box (with `height`).",
            "valType": "enumerated"
          },
          "bgcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Box background.",
            "valType": "color"
          },
          "bordercolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Box border color.",
            "valType": "color"
          },
          "borderpad": {
            "min": 0,
            "dflt": 1,
            "description": "Padding between text and border, px.",
            "valType": "number"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 1,
            "description": "Box border width, px.",
            "valType": "number"
          },
          "showarrow": {
            "dflt": true,
            "description": "Draw an arrow from the text to `x`/`y`; the text then sits at the tail (`ax`/`ay`).",
            "valType": "boolean"
          },
          "arrowcolor": {
            "description": "Arrow color. Defaults to `bordercolor` when visible, else `#444`.",
            "valType": "color"
          },
          "arrowhead": {
            "min": 0,
            "max": 8,
            "dflt": 1,
            "description": "End arrowhead: 0 none, 1 wide, 2 narrow, 3 barbed, 4–5 line-drawn, 6 circle, 7 square, 8 bar.",
            "valType": "integer"
          },
          "startarrowhead": {
            "min": 0,
            "max": 8,
            "dflt": 1,
            "description": "Start arrowhead (0–8).",
            "valType": "integer"
          },
          "arrowside": {
            "flags": ["end", "start"],
            "extras": ["none"],
            "dflt": "end",
            "description": "Which ends get an arrowhead.",
            "valType": "flaglist"
          },
          "arrowsize": {
            "min": 0.3,
            "dflt": 1,
            "description": "End arrowhead size, relative to `arrowwidth`.",
            "valType": "number"
          },
          "startarrowsize": {
            "min": 0.3,
            "dflt": 1,
            "description": "Start arrowhead size, relative to `arrowwidth`.",
            "valType": "number"
          },
          "arrowwidth": {
            "min": 0.1,
            "description": "Arrow line width, px. Defaults to 2 (twice a visible border width).",
            "valType": "number"
          },
          "standoff": {
            "min": 0,
            "dflt": 0,
            "description": "Gap between the arrowhead tip and `x`/`y`, px.",
            "valType": "number"
          },
          "startstandoff": {
            "min": 0,
            "dflt": 0,
            "description": "Gap between the text box and the start of the arrow, px.",
            "valType": "number"
          },
          "ax": {
            "description": "Arrow tail x: px from the head (`axref: pixel`, default −10) or a position in `axref` units.",
            "valType": "any"
          },
          "ay": {
            "description": "Arrow tail y: px from the head, positive down (`ayref: pixel`, default −30) or a position in `ayref` units.",
            "valType": "any"
          },
          "axref": {
            "dflt": "pixel",
            "description": "`'pixel'`, or `'paper'` (0–1 across the plot area), an axis id (`'x'`, `'x2'`: data units of that axis; log axes take exponents, as `range` does) or `'<axis> domain'` (0–1 across that axis' domain).",
            "valType": "string"
          },
          "ayref": {
            "dflt": "pixel",
            "description": "`'pixel'`, or `'paper'` (0–1 across the plot area), an axis id (`'x'`, `'x2'`: data units of that axis; log axes take exponents, as `range` does) or `'<axis> domain'` (0–1 across that axis' domain).",
            "valType": "string"
          },
          "xref": {
            "dflt": "x",
            "description": "Reference of `x`: `'paper'` (0–1 across the plot area), an axis id (`'x'`, `'x2'`: data units of that axis; log axes take exponents, as `range` does) or `'<axis> domain'` (0–1 across that axis' domain).",
            "valType": "string"
          },
          "yref": {
            "dflt": "y",
            "description": "Reference of `y`: `'paper'` (0–1 across the plot area), an axis id (`'x'`, `'x2'`: data units of that axis; log axes take exponents, as `range` does) or `'<axis> domain'` (0–1 across that axis' domain).",
            "valType": "string"
          },
          "x": {
            "description": "Anchor x (the arrow head). Defaults to the middle of the reference.",
            "valType": "any"
          },
          "y": {
            "description": "Anchor y (the arrow head). Defaults to the middle of the reference.",
            "valType": "any"
          },
          "xanchor": {
            "values": ["auto", "left", "center", "right"],
            "dflt": "auto",
            "description": "Which side of the text box sits at the anchor (or tail). `auto`: `center` with an arrow or a data reference, else by thirds of `x`.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["auto", "top", "middle", "bottom"],
            "dflt": "auto",
            "description": "Which side of the text box sits at the anchor (or tail); `auto` as `xanchor`.",
            "valType": "enumerated"
          },
          "xshift": {
            "dflt": 0,
            "description": "Shift the whole annotation right, px.",
            "valType": "number"
          },
          "yshift": {
            "dflt": 0,
            "description": "Shift the whole annotation up, px.",
            "valType": "number"
          },
          "clicktoshow": {
            "values": [false, "onoff", "onout"],
            "dflt": false,
            "description": "Toggle `visible` when a data point at `xclick`/`yclick` (default `x`/`y`) is clicked; `onout` also hides it on clicks on other points.",
            "valType": "enumerated"
          },
          "xclick": {
            "description": "x of the point that toggles this annotation.",
            "valType": "any"
          },
          "yclick": {
            "description": "y of the point that toggles this annotation.",
            "valType": "any"
          },
          "hovertext": {
            "description": "Hover text (declared; hover labels for annotations are not drawn yet).",
            "valType": "string"
          },
          "hoverlabel": {
            "description": "Hover label style (declared; not drawn yet).",
            "role": "object",
            "bgcolor": {
              "description": "Hover label background.",
              "valType": "color"
            },
            "bordercolor": {
              "description": "Hover label border.",
              "valType": "color"
            },
            "font": {
              "description": "Hover label font.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            }
          },
          "captureevents": {
            "description": "Take pointer events over the text box and emit `clickannotation` on click. Defaults to true with `hovertext`.",
            "valType": "boolean"
          },
          "name": {
            "editType": "none",
            "description": "Name of this annotation, used to reference it from a template via `templateitemname`.",
            "valType": "string"
          },
          "templateitemname": {
            "editType": "plot",
            "description": "Name of a template annotation to inherit from. If no template item matches, this annotation is hidden (`visible: false`).",
            "valType": "string"
          }
        }
      },
      "images": {
        "editType": "plot",
        "description": "Pictures placed on the figure: logos, backgrounds (plan E5.6).",
        "itemName": "image",
        "role": "items",
        "items": {
          "role": "object",
          "visible": {
            "dflt": true,
            "description": "Draw this image.",
            "valType": "boolean"
          },
          "source": {
            "description": "Image URL or data URI (PNG, JPEG, SVG, …). Cross-origin URLs need CORS headers (WebGL cannot draw tainted images).",
            "valType": "string"
          },
          "layer": {
            "values": ["below", "above"],
            "dflt": "above",
            "description": "`above` traces, or `below` them and the grid (images with a `paper` reference go under every subplot).",
            "valType": "enumerated"
          },
          "sizex": {
            "dflt": 0,
            "description": "Width of the image box, in `xref` units.",
            "valType": "number"
          },
          "sizey": {
            "dflt": 0,
            "description": "Height of the image box, in `yref` units.",
            "valType": "number"
          },
          "sizing": {
            "values": ["fill", "contain", "stretch"],
            "dflt": "contain",
            "description": "`contain`: fit inside the box keeping the aspect ratio; `fill`: cover the box keeping the aspect ratio (cropped); `stretch`: fill the box exactly.",
            "valType": "enumerated"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "description": "Opacity of the image.",
            "valType": "number"
          },
          "x": {
            "dflt": 0,
            "description": "x position of the box, in `xref` units.",
            "valType": "any"
          },
          "y": {
            "dflt": 0,
            "description": "y position of the box, in `yref` units.",
            "valType": "any"
          },
          "xanchor": {
            "values": ["left", "center", "right"],
            "dflt": "left",
            "description": "Which side of the box sits at `x` (and where a `contain`ed image aligns).",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "dflt": "top",
            "description": "Which side of the box sits at `y` (and where a `contain`ed image aligns).",
            "valType": "enumerated"
          },
          "xref": {
            "dflt": "paper",
            "description": "Reference of `x` and `sizex`: `'paper'` (0–1 across the plot area), an axis id (`'x'`, `'x2'`: that axis' range units, so exponents on log axes) or `'<axis> domain'` (0–1 across that axis' domain).",
            "valType": "string"
          },
          "yref": {
            "dflt": "paper",
            "description": "Reference of `y` and `sizey`: `'paper'` (0–1 across the plot area), an axis id (`'x'`, `'x2'`: that axis' range units, so exponents on log axes) or `'<axis> domain'` (0–1 across that axis' domain).",
            "valType": "string"
          },
          "name": {
            "editType": "none",
            "description": "Name of this image, used to reference it from a template via `templateitemname`.",
            "valType": "string"
          },
          "templateitemname": {
            "editType": "plot",
            "description": "Name of a template image to inherit from. If no template item matches, this image is hidden (`visible: false`).",
            "valType": "string"
          }
        }
      },
      "legend": {
        "editType": "legend+layout",
        "description": "The legend (E5.2). `legend2`, `legend3`, … declare more, referenced from traces' `legend` (`'legend2'`).",
        "subplot": "legend",
        "role": "object",
        "visible": {
          "dflt": true,
          "description": "Draw the legend (with `showlegend`).",
          "valType": "boolean"
        },
        "bgcolor": {
          "description": "Background color. Defaults to `paper_bgcolor`.",
          "valType": "color"
        },
        "bordercolor": {
          "dflt": "#444",
          "description": "Border color.",
          "valType": "color"
        },
        "borderwidth": {
          "min": 0,
          "dflt": 0,
          "description": "Border width in px.",
          "valType": "number"
        },
        "font": {
          "description": "Item font. Defaults to `layout.font`.",
          "editType": "layout+plot",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "description": "Font size in CSS pixels.",
            "valType": "number"
          },
          "color": {
            "description": "Text color.",
            "editType": "style",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "description": "Font style.",
            "valType": "enumerated"
          },
          "variant": {
            "values": [
              "normal",
              "small-caps",
              "all-small-caps",
              "all-petite-caps",
              "petite-caps",
              "unicase"
            ],
            "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
            "valType": "enumerated"
          },
          "textcase": {
            "values": ["normal", "word caps", "upper", "lower"],
            "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
            "valType": "enumerated"
          },
          "lineposition": {
            "flags": ["under", "over", "through"],
            "extras": ["none"],
            "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
            "valType": "flaglist"
          },
          "shadow": {
            "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
            "valType": "string"
          }
        },
        "grouptitlefont": {
          "description": "Font of the group titles (`legendgrouptitle`). Defaults to `layout.font`, 10% larger.",
          "editType": "layout+plot",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "description": "Font size in CSS pixels.",
            "valType": "number"
          },
          "color": {
            "description": "Text color.",
            "editType": "style",
            "valType": "color"
          },
          "weight": {
            "min": 1,
            "max": 1000,
            "extras": ["normal", "bold"],
            "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
            "valType": "integer"
          },
          "style": {
            "values": ["normal", "italic"],
            "description": "Font style.",
            "valType": "enumerated"
          },
          "variant": {
            "values": [
              "normal",
              "small-caps",
              "all-small-caps",
              "all-petite-caps",
              "petite-caps",
              "unicase"
            ],
            "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
            "valType": "enumerated"
          },
          "textcase": {
            "values": ["normal", "word caps", "upper", "lower"],
            "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
            "valType": "enumerated"
          },
          "lineposition": {
            "flags": ["under", "over", "through"],
            "extras": ["none"],
            "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
            "valType": "flaglist"
          },
          "shadow": {
            "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
            "valType": "string"
          }
        },
        "orientation": {
          "values": ["v", "h"],
          "dflt": "v",
          "description": "Stack items vertically (`v`) or in rows (`h`).",
          "valType": "enumerated"
        },
        "traceorder": {
          "flags": ["reversed", "grouped"],
          "extras": ["normal"],
          "description": "Item order: trace order (`normal`), reversed, grouped by `legendgroup`, or both. Defaults to `grouped` when any trace has a `legendgroup`, else `normal`.",
          "valType": "flaglist"
        },
        "tracegroupgap": {
          "min": 0,
          "dflt": 10,
          "description": "Gap between legend groups in px (grouped order).",
          "valType": "number"
        },
        "entrywidth": {
          "min": 0,
          "description": "Width of each item (`h` orientation): px or a fraction of the plot width.",
          "valType": "number"
        },
        "entrywidthmode": {
          "values": ["fraction", "pixels"],
          "dflt": "pixels",
          "description": "Unit of `entrywidth`.",
          "valType": "enumerated"
        },
        "indentation": {
          "min": -15,
          "dflt": 0,
          "description": "Indent of the items in px.",
          "valType": "number"
        },
        "itemsizing": {
          "values": ["trace", "constant"],
          "dflt": "trace",
          "description": "Glyph sizes follow the traces (capped) or are constant.",
          "valType": "enumerated"
        },
        "itemwidth": {
          "min": 30,
          "dflt": 30,
          "description": "Width of the glyph area in px.",
          "valType": "number"
        },
        "itemclick": {
          "values": ["toggle", "toggleothers", false],
          "dflt": "toggle",
          "description": "What clicking an item does.",
          "valType": "enumerated"
        },
        "itemdoubleclick": {
          "values": ["toggle", "toggleothers", false],
          "dflt": "toggleothers",
          "description": "What double-clicking an item does.",
          "valType": "enumerated"
        },
        "groupclick": {
          "values": ["toggleitem", "togglegroup"],
          "dflt": "togglegroup",
          "description": "Whether clicks toggle the whole `legendgroup` or only the item.",
          "valType": "enumerated"
        },
        "x": {
          "min": -2,
          "max": 3,
          "description": "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`) or 0 (`h`).",
          "valType": "number"
        },
        "xanchor": {
          "values": ["auto", "left", "center", "right"],
          "dflt": "left",
          "description": "Which side of the legend sits at `x`.",
          "valType": "enumerated"
        },
        "xref": {
          "values": ["container", "paper"],
          "dflt": "paper",
          "description": "Reference of `x`.",
          "valType": "enumerated"
        },
        "y": {
          "min": -2,
          "max": 3,
          "description": "Vertical position (`yref` fraction). Defaults to 1 (`v`) or −0.1 (`h`).",
          "valType": "number"
        },
        "yanchor": {
          "values": ["auto", "top", "middle", "bottom"],
          "description": "Which side sits at `y`. Defaults to `auto` (`v`) or `top` (`h`).",
          "valType": "enumerated"
        },
        "yref": {
          "values": ["container", "paper"],
          "dflt": "paper",
          "description": "Reference of `y`.",
          "valType": "enumerated"
        },
        "valign": {
          "values": ["top", "middle", "bottom"],
          "dflt": "middle",
          "description": "Vertical alignment of the text with its glyph (multi-line items).",
          "valType": "enumerated"
        },
        "maxheight": {
          "min": 0,
          "description": "Maximum height: px, or a fraction (≤ 1) of the plot height (vertical legends beside a paper-referenced plot) or of the figure height (others); taller content scrolls. Defaults to 1 (vertical legends beside the plot) or 0.5; at least 30 px.",
          "valType": "number"
        },
        "title": {
          "editType": "legend+layout",
          "description": "Legend title.",
          "role": "object",
          "text": {
            "dflt": "",
            "description": "Legend title.",
            "valType": "string"
          },
          "font": {
            "description": "Title font. Defaults to the legend font.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "side": {
            "values": ["top", "left", "top left", "top center", "top right"],
            "description": "Where the title goes. Defaults to `top` (`v`) or `left` (`h`).",
            "valType": "enumerated"
          }
        },
        "uirevision": {
          "description": "Keeps legend UI state across updates while unchanged.",
          "valType": "any"
        }
      },
      "modebar": {
        "editType": "modebar",
        "description": "The modebar: toolbar with zoom, pan, select and export.",
        "role": "object",
        "orientation": {
          "values": ["h", "v"],
          "dflt": "h",
          "description": "Lay the buttons out horizontally (`h`) or vertically (`v`).",
          "valType": "enumerated"
        },
        "bgcolor": {
          "description": "Background of the button groups. Default: `paper_bgcolor` at half opacity.",
          "valType": "color"
        },
        "color": {
          "description": "Icon color. Default: `layout.font.color` at 0.3 opacity.",
          "valType": "color"
        },
        "activecolor": {
          "description": "Icon color of pressed and hovered buttons. Default: `layout.font.color` at 0.7 opacity.",
          "valType": "color"
        },
        "add": {
          "items": {
            "valType": "string"
          },
          "freeLength": true,
          "dflt": [],
          "description": "Names of built-in buttons to add (e.g. `hoverclosest`, `hovercompare`, `v1hovermode`, `togglespikelines`).",
          "valType": "info_array"
        },
        "remove": {
          "items": {
            "valType": "string"
          },
          "freeLength": true,
          "dflt": [],
          "description": "Names of buttons to remove (e.g. `zoom`, `pan`, `select`, `lasso`, `zoomin`, `zoomout`, `autoscale`, `resetscale`, `toimage`), case-insensitive.",
          "valType": "info_array"
        },
        "uirevision": {
          "description": "Keeps user-driven modebar changes across `react` while unchanged. Accepted for Plotly compatibility; the modebar has no state of its own yet.",
          "valType": "any"
        }
      },
      "shapes": {
        "editType": "plot",
        "description": "Lines, rectangles, ellipses and paths in data or paper coordinates (plan E5.5).",
        "itemName": "shape",
        "role": "items",
        "items": {
          "role": "object",
          "visible": {
            "values": [true, false, "legendonly"],
            "dflt": true,
            "description": "Draw this shape (`legendonly` hides it until legend entries for shapes land).",
            "valType": "enumerated"
          },
          "type": {
            "values": ["circle", "rect", "path", "line"],
            "description": "`line` from (`x0`,`y0`) to (`x1`,`y1`); `rect` and `circle` (an ellipse) inside that box; `path` draws `path`. Default: `path` when `path` is set, else `rect`.",
            "valType": "enumerated"
          },
          "layer": {
            "values": ["below", "above", "between"],
            "dflt": "above",
            "description": "`above` traces; `below` traces and grid lines; `between` grid lines and traces. Shapes with a `paper` reference draw under every subplot when not `above`.",
            "valType": "enumerated"
          },
          "xref": {
            "dflt": "x",
            "description": "Reference of the x coordinates: `'paper'` (0–1 across the plot area), an axis id (`'x'`, `'x2'`: data units of that axis — on log axes data values, not exponents; on category axes names or fractional indices) or `'<axis> domain'` (0–1 across that axis' domain).",
            "valType": "string"
          },
          "yref": {
            "dflt": "y",
            "description": "Reference of the y coordinates: `'paper'` (0–1 across the plot area), an axis id (`'x'`, `'x2'`: data units of that axis — on log axes data values, not exponents; on category axes names or fractional indices) or `'<axis> domain'` (0–1 across that axis' domain).",
            "valType": "string"
          },
          "xsizemode": {
            "values": ["scaled", "pixel"],
            "dflt": "scaled",
            "description": "`scaled`: `x0`/`x1` (and path x values) are in `xref` units. `pixel`: they are px offsets from `xanchor`, so the shape keeps its size when zooming.",
            "valType": "enumerated"
          },
          "ysizemode": {
            "values": ["scaled", "pixel"],
            "dflt": "scaled",
            "description": "`scaled`: `y0`/`y1` (and path y values) are in `yref` units. `pixel`: they are px offsets from `yanchor` (positive up), so the shape keeps its size when zooming.",
            "valType": "enumerated"
          },
          "xanchor": {
            "description": "x anchor (in `xref` units) of a `pixel`-sized shape.",
            "valType": "any"
          },
          "yanchor": {
            "description": "y anchor (in `yref` units) of a `pixel`-sized shape.",
            "valType": "any"
          },
          "x0": {
            "description": "Start x. Default: 25% across the reference (px 0 when `pixel`).",
            "valType": "any"
          },
          "x1": {
            "description": "End x. Default: 75% across the reference (px 10 when `pixel`).",
            "valType": "any"
          },
          "y0": {
            "description": "Start y. Default: 25% up the reference (px 0 when `pixel`).",
            "valType": "any"
          },
          "y1": {
            "description": "End y. Default: 75% up the reference (px 10 when `pixel`).",
            "valType": "any"
          },
          "path": {
            "description": "SVG path (`type: path`) with coordinates in `xref`/`yref` units: M, L, H, V, C, S, Q, T, A, Z and their relative forms. Dates use `_` between date and time (`2024-01-05_12:00`); relative commands and arcs need numbers.",
            "valType": "string"
          },
          "opacity": {
            "min": 0,
            "max": 1,
            "dflt": 1,
            "description": "Opacity of the shape.",
            "valType": "number"
          },
          "line": {
            "description": "Outline.",
            "role": "object",
            "color": {
              "dflt": "#444",
              "description": "Outline color.",
              "valType": "color"
            },
            "width": {
              "min": 0,
              "dflt": 2,
              "description": "Outline width, px (0: no outline).",
              "valType": "number"
            },
            "dash": {
              "dflt": "solid",
              "description": "Dash style: `solid`, `dot`, `dash`, `longdash`, `dashdot`, `longdashdot` or a px list (`'5px,10px'`).",
              "valType": "string"
            }
          },
          "fillcolor": {
            "dflt": "rgba(0,0,0,0)",
            "description": "Fill of closed shapes (`rect`, `circle`, `path`; open paths are closed for filling).",
            "valType": "color"
          },
          "fillrule": {
            "values": ["evenodd", "nonzero"],
            "dflt": "evenodd",
            "description": "How overlapping subpaths of a `path` fill (SVG `fill-rule`).",
            "valType": "enumerated"
          },
          "editable": {
            "dflt": false,
            "description": "Let users drag and resize this shape even when the chart is not editable.",
            "valType": "boolean"
          },
          "showlegend": {
            "dflt": false,
            "description": "Legend entry for this shape (declared; not drawn yet).",
            "valType": "boolean"
          },
          "legendgroup": {
            "dflt": "",
            "description": "Legend group (declared; not used yet).",
            "valType": "string"
          },
          "label": {
            "description": "Text label drawn with the shape.",
            "role": "object",
            "text": {
              "dflt": "",
              "description": "Label text (`<br>` breaks lines).",
              "valType": "string"
            },
            "texttemplate": {
              "dflt": "",
              "description": "Label template overriding `text` (not for paths): `%{x0}`, `%{x1}`, `%{y0}`, `%{y1}`, `%{xcenter}`, `%{ycenter}`, `%{dx}`, `%{dy}`, `%{width}`, `%{height}`, and for lines `%{length}` and `%{slope}`, with d3 formats (`%{dx:.2f}`).",
              "valType": "string"
            },
            "font": {
              "description": "Label font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "textposition": {
              "values": [
                "top left",
                "top center",
                "top right",
                "middle left",
                "middle center",
                "middle right",
                "bottom left",
                "bottom center",
                "bottom right",
                "start",
                "middle",
                "end"
              ],
              "description": "Where the label sits: `start`/`middle`/`end` along lines (default `middle`), a box position for other shapes (default `middle center`).",
              "valType": "enumerated"
            },
            "textangle": {
              "dflt": "auto",
              "extras": ["auto"],
              "description": "Label angle, degrees clockwise. `auto`: along lines, else 0.",
              "valType": "angle"
            },
            "xanchor": {
              "values": ["auto", "left", "center", "right"],
              "dflt": "auto",
              "description": "Which side of the label sits at its position. `auto` follows `textposition`.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["top", "middle", "bottom"],
              "description": "Which side of the label sits at its position. Default: `bottom` for lines (text above the line), else the vertical part of `textposition`.",
              "valType": "enumerated"
            },
            "padding": {
              "min": 0,
              "dflt": 3,
              "description": "Gap between label and shape, px.",
              "valType": "number"
            }
          },
          "name": {
            "editType": "none",
            "description": "Name of this shape, used to reference it from a template via `templateitemname`.",
            "valType": "string"
          },
          "templateitemname": {
            "editType": "plot",
            "description": "Name of a template shape to inherit from. If no template item matches, this shape is hidden (`visible: false`).",
            "valType": "string"
          }
        }
      },
      "newshape": {
        "editType": "none",
        "description": "Style of shapes drawn with the draw `dragmode`s (`drawline`, `drawopenpath`, `drawclosedpath`, `drawcircle`, `drawrect`).",
        "role": "object",
        "visible": {
          "values": [true, false, "legendonly"],
          "dflt": true,
          "description": "Draw this shape (`legendonly` hides it until legend entries for shapes land).",
          "valType": "enumerated"
        },
        "showlegend": {
          "dflt": false,
          "description": "Legend entry for this shape (declared; not drawn yet).",
          "valType": "boolean"
        },
        "legendgroup": {
          "dflt": "",
          "description": "Legend group (declared; not used yet).",
          "valType": "string"
        },
        "line": {
          "description": "Outline of new shapes.",
          "role": "object",
          "color": {
            "description": "Outline color. Default: a color contrasting with `plot_bgcolor` (`#444` on light, `#fff` on dark).",
            "valType": "color"
          },
          "width": {
            "min": 0,
            "dflt": 4,
            "description": "Outline width, px.",
            "valType": "number"
          },
          "dash": {
            "dflt": "solid",
            "description": "Outline dash style (as `shapes[].line.dash`).",
            "valType": "string"
          }
        },
        "fillcolor": {
          "dflt": "rgba(0,0,0,0)",
          "description": "Fill of new closed shapes (`drawopenpath` shapes are not filled).",
          "valType": "color"
        },
        "fillrule": {
          "values": ["evenodd", "nonzero"],
          "dflt": "evenodd",
          "description": "How overlapping subpaths of a `path` fill (SVG `fill-rule`).",
          "valType": "enumerated"
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 1,
          "description": "Opacity of new shapes (the outline drawn while dragging shows at half of it).",
          "valType": "number"
        },
        "layer": {
          "values": ["below", "above", "between"],
          "dflt": "above",
          "description": "`above` traces; `below` traces and grid lines; `between` grid lines and traces. Shapes with a `paper` reference draw under every subplot when not `above`.",
          "valType": "enumerated"
        },
        "drawdirection": {
          "values": ["ortho", "horizontal", "vertical", "diagonal"],
          "dflt": "diagonal",
          "description": "Constrains `drawline`, `drawrect` and `drawcircle` drags (as in Plotly): `diagonal` is free; `ortho` makes lines horizontal or vertical; `vertical` spans the plot height (rectangles; lines are vertical at the pointer); `horizontal` spans the plot width.",
          "valType": "enumerated"
        },
        "label": {
          "description": "Label of new shapes.",
          "role": "object",
          "text": {
            "dflt": "",
            "description": "Label text of new shapes.",
            "valType": "string"
          },
          "texttemplate": {
            "dflt": "",
            "description": "Label template of new shapes (as `shapes[].label.texttemplate`).",
            "valType": "string"
          },
          "font": {
            "description": "Label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "textposition": {
            "values": [
              "top left",
              "top center",
              "top right",
              "middle left",
              "middle center",
              "middle right",
              "bottom left",
              "bottom center",
              "bottom right",
              "start",
              "middle",
              "end"
            ],
            "description": "Where the label sits: `start`/`middle`/`end` along lines (default `middle`), a box position for other shapes (default `middle center`).",
            "valType": "enumerated"
          },
          "textangle": {
            "dflt": "auto",
            "extras": ["auto"],
            "description": "Label angle, degrees clockwise. `auto`: along lines, else 0.",
            "valType": "angle"
          },
          "xanchor": {
            "values": ["auto", "left", "center", "right"],
            "dflt": "auto",
            "description": "Which side of the label sits at its position. `auto` follows `textposition`.",
            "valType": "enumerated"
          },
          "yanchor": {
            "values": ["top", "middle", "bottom"],
            "description": "Which side of the label sits at its position. Default: `bottom` for lines (text above the line), else the vertical part of `textposition`.",
            "valType": "enumerated"
          },
          "padding": {
            "min": 0,
            "dflt": 3,
            "description": "Gap between label and shape, px.",
            "valType": "number"
          }
        }
      },
      "activeshape": {
        "editType": "plot",
        "description": "The active shape: an `editable` shape clicked to select it (the `eraseshape` modebar button removes it).",
        "role": "object",
        "fillcolor": {
          "dflt": "rgb(255,0,255)",
          "description": "Fill of the active shape (open paths stay unfilled).",
          "valType": "color"
        },
        "opacity": {
          "min": 0,
          "max": 1,
          "dflt": 0.5,
          "description": "Opacity of the active shape.",
          "valType": "number"
        }
      },
      "sliders": {
        "editType": "layout",
        "description": "Sliders that step through `restyle`, `relayout`, `update` or `animate` calls (plan E5.11).",
        "itemName": "slider",
        "role": "items",
        "items": {
          "role": "object",
          "visible": {
            "dflt": true,
            "description": "Show this slider (sliders with fewer than two visible steps are hidden).",
            "valType": "boolean"
          },
          "active": {
            "min": 0,
            "dflt": 0,
            "editType": "modebar",
            "description": "Index of the active step. Moving the slider sets it; it also follows the figure when every step sets the same single attribute.",
            "valType": "number"
          },
          "steps": {
            "editType": "layout",
            "description": "The steps of the slider.",
            "itemName": "step",
            "role": "items",
            "items": {
              "role": "object",
              "visible": {
                "dflt": true,
                "description": "Include this step. Steps without `args` (and not `method: skip`) are always hidden, like in Plotly.",
                "valType": "boolean"
              },
              "method": {
                "values": ["restyle", "relayout", "animate", "update", "skip"],
                "dflt": "restyle",
                "description": "Chart API method the step calls: `restyle`, `relayout`, `update` (Plotly's `update`), `animate` (frames, plan E7.4) or `skip` (only the events).",
                "valType": "enumerated"
              },
              "args": {
                "items": {
                  "dflt": null,
                  "description": "An argument (`null` allowed).",
                  "valType": "any"
                },
                "freeLength": true,
                "description": "Arguments of `method`, as in Plotly: `['attr', value, traces?]` or `[{ attr: value }, traces?]` for `restyle`, `[{ attr: value }]` for `relayout`, `[traceUpdate, layoutUpdate, traces?]` for `update`, `[frames, options]` for `animate`.",
                "valType": "info_array"
              },
              "label": {
                "description": "Tick label and current-value text of the step. Default: `step-<index>`.",
                "valType": "string"
              },
              "value": {
                "description": "A value identifying the step (in events). Default: `label`.",
                "valType": "string"
              },
              "execute": {
                "dflt": true,
                "description": "Call `method` when the step becomes active through the slider. `false` only moves the slider and emits `sliderchange`.",
                "valType": "boolean"
              },
              "name": {
                "editType": "none",
                "description": "Name of this step, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template step to inherit from. If no template item matches, this step is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "lenmode": {
            "values": ["fraction", "pixels"],
            "dflt": "fraction",
            "description": "Unit of `len`: a fraction of the plot-area width or px.",
            "valType": "enumerated"
          },
          "len": {
            "min": 0,
            "dflt": 1,
            "description": "Length of the slider, in `lenmode` units.",
            "valType": "number"
          },
          "x": {
            "min": -2,
            "max": 3,
            "dflt": 0,
            "description": "Horizontal position, in plot-area (paper) fractions.",
            "valType": "number"
          },
          "xanchor": {
            "values": ["auto", "left", "center", "right"],
            "dflt": "left",
            "description": "Which side of the slider sits at `x`; `auto` picks one from `x`.",
            "valType": "enumerated"
          },
          "y": {
            "min": -2,
            "max": 3,
            "dflt": 0,
            "description": "Vertical position, in plot-area (paper) fractions.",
            "valType": "number"
          },
          "yanchor": {
            "values": ["auto", "top", "middle", "bottom"],
            "dflt": "top",
            "description": "Which side of the slider sits at `y`; `auto` picks one from `y`.",
            "valType": "enumerated"
          },
          "pad": {
            "description": "Padding around the slider, in px.",
            "editType": "layout",
            "role": "object",
            "t": {
              "dflt": 20,
              "description": "Padding above, in px.",
              "valType": "number"
            },
            "r": {
              "dflt": 0,
              "description": "Padding on the right, in px.",
              "valType": "number"
            },
            "b": {
              "dflt": 0,
              "description": "Padding below, in px.",
              "valType": "number"
            },
            "l": {
              "dflt": 0,
              "description": "Padding on the left, in px.",
              "valType": "number"
            }
          },
          "transition": {
            "editType": "modebar",
            "description": "How the handle moves to a new step (not while dragging).",
            "role": "object",
            "duration": {
              "min": 0,
              "dflt": 150,
              "description": "Duration of the handle animation when the active step changes, in ms.",
              "valType": "number"
            },
            "easing": {
              "values": [
                "linear",
                "quad",
                "cubic",
                "sin",
                "exp",
                "circle",
                "elastic",
                "back",
                "bounce",
                "linear-in",
                "quad-in",
                "cubic-in",
                "sin-in",
                "exp-in",
                "circle-in",
                "elastic-in",
                "back-in",
                "bounce-in",
                "linear-out",
                "quad-out",
                "cubic-out",
                "sin-out",
                "exp-out",
                "circle-out",
                "elastic-out",
                "back-out",
                "bounce-out",
                "linear-in-out",
                "quad-in-out",
                "cubic-in-out",
                "sin-in-out",
                "exp-in-out",
                "circle-in-out",
                "elastic-in-out",
                "back-in-out",
                "bounce-in-out"
              ],
              "dflt": "cubic-in-out",
              "description": "Easing of the handle animation.",
              "valType": "enumerated"
            }
          },
          "currentvalue": {
            "editType": "layout",
            "description": "The current-value label.",
            "role": "object",
            "visible": {
              "dflt": true,
              "description": "Show the current value above the slider.",
              "valType": "boolean"
            },
            "xanchor": {
              "values": ["left", "center", "right"],
              "dflt": "left",
              "description": "Alignment of the current value over the slider.",
              "valType": "enumerated"
            },
            "offset": {
              "dflt": 10,
              "description": "Gap between the current value and the slider, in px.",
              "valType": "number"
            },
            "prefix": {
              "description": "Text before the value (e.g. `Year: `).",
              "valType": "string"
            },
            "suffix": {
              "description": "Text after the value.",
              "valType": "string"
            },
            "font": {
              "description": "Current-value font. Defaults to the slider font.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            }
          },
          "font": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "bgcolor": {
            "editType": "modebar",
            "description": "Rail and handle background. Default: Plotly's `#f8fafc`, or a tint of the paper on dark papers.",
            "valType": "color"
          },
          "activebgcolor": {
            "editType": "modebar",
            "description": "Handle background while dragged or hovered. Default: Plotly's `#dbdde0`, or a tint of the paper on dark papers.",
            "valType": "color"
          },
          "bordercolor": {
            "editType": "modebar",
            "description": "Rail and handle border color. Default: Plotly's `#bec8d9`, or a tint of the paper on dark papers.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 1,
            "description": "Rail and handle border width, in px.",
            "valType": "number"
          },
          "ticklen": {
            "min": 0,
            "dflt": 7,
            "description": "Length of labeled step ticks, in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "modebar",
            "description": "Tick color. Default: Plotly's `#333`, or a tint of the paper on dark papers.",
            "valType": "color"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "description": "Tick width, in px.",
            "valType": "number"
          },
          "minorticklen": {
            "min": 0,
            "dflt": 4,
            "description": "Length of unlabeled step ticks, in px.",
            "valType": "number"
          },
          "name": {
            "editType": "none",
            "description": "Name of this slider, used to reference it from a template via `templateitemname`.",
            "valType": "string"
          },
          "templateitemname": {
            "editType": "plot",
            "description": "Name of a template slider to inherit from. If no template item matches, this slider is hidden (`visible: false`).",
            "valType": "string"
          }
        }
      },
      "updatemenus": {
        "editType": "layout",
        "description": "Buttons and dropdowns over the chart that call `restyle`, `relayout`, `update` or `animate` (plan E5.10).",
        "itemName": "updatemenu",
        "role": "items",
        "items": {
          "role": "object",
          "visible": {
            "description": "Show this menu. Default: `true` when it has a visible button.",
            "valType": "boolean"
          },
          "type": {
            "values": ["dropdown", "buttons"],
            "dflt": "dropdown",
            "description": "`dropdown`: a button showing the active item that opens a list; `buttons`: every button side by side.",
            "valType": "enumerated"
          },
          "direction": {
            "values": ["left", "right", "up", "down"],
            "dflt": "down",
            "description": "Where the buttons go: in a row (`left`, `right`) or a column (`up`, `down`); for dropdowns, the side the list opens on.",
            "valType": "enumerated"
          },
          "active": {
            "min": -1,
            "dflt": 0,
            "editType": "modebar",
            "description": "Index of the active button (`-1`: none). Clicking a button sets it; it also follows the figure when every button sets the same single attribute.",
            "valType": "integer"
          },
          "showactive": {
            "dflt": true,
            "editType": "modebar",
            "description": "Highlight the active button (and mark it `aria-pressed`). Turn off for action buttons.",
            "valType": "boolean"
          },
          "buttons": {
            "editType": "layout",
            "description": "The buttons of the menu.",
            "itemName": "button",
            "role": "items",
            "items": {
              "role": "object",
              "visible": {
                "description": "Show this button. Default: `true` when it has `args` (or `method: skip`), else `false`.",
                "valType": "boolean"
              },
              "method": {
                "values": ["restyle", "relayout", "animate", "update", "skip"],
                "dflt": "restyle",
                "description": "Chart API method the item calls: `restyle`, `relayout`, `update` (Plotly's `update`, i.e. `chart.updateAttributes`), `animate` (frames, plan E7.4) or `skip` (only the event).",
                "valType": "enumerated"
              },
              "args": {
                "items": {
                  "dflt": null,
                  "description": "An argument (`null` allowed).",
                  "valType": "any"
                },
                "freeLength": true,
                "description": "Arguments of `method`, as in Plotly: `['attr', value, traces?]` or `[{ attr: value }, traces?]` for `restyle`, `['attr', value]` or `[{ attr: value }]` for `relayout`, `[traceUpdate, layoutUpdate, traces?]` for `update`, `[frames, options]` for `animate`.",
                "valType": "info_array"
              },
              "args2": {
                "items": {
                  "dflt": null,
                  "description": "An argument (`null` allowed).",
                  "valType": "any"
                },
                "freeLength": true,
                "description": "Arguments of `method` for a second click: with `args2`, clicking the active button calls `method` with `args2` and deactivates it (a toggle).",
                "valType": "info_array"
              },
              "label": {
                "dflt": "",
                "description": "Button text (Plotly pseudo-HTML tags are removed).",
                "valType": "string"
              },
              "execute": {
                "dflt": true,
                "description": "Call `method` on click. `false` only emits `buttonclicked` (and leaves `active` alone), for apps that handle the click themselves.",
                "valType": "boolean"
              },
              "name": {
                "editType": "none",
                "description": "Name of this button, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template button to inherit from. If no template item matches, this button is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "x": {
            "min": -2,
            "max": 3,
            "dflt": -0.05,
            "description": "Horizontal position, in plot-area (paper) fractions.",
            "valType": "number"
          },
          "xanchor": {
            "values": ["auto", "left", "center", "right"],
            "dflt": "right",
            "description": "Which side of the menu sits at `x`; `auto` picks `left`, `center` or `right` from `x`.",
            "valType": "enumerated"
          },
          "y": {
            "min": -2,
            "max": 3,
            "dflt": 1,
            "description": "Vertical position, in plot-area (paper) fractions.",
            "valType": "number"
          },
          "yanchor": {
            "values": ["auto", "top", "middle", "bottom"],
            "dflt": "top",
            "description": "Which side of the menu sits at `y`; `auto` picks `top`, `middle` or `bottom` from `y`.",
            "valType": "enumerated"
          },
          "pad": {
            "description": "Padding around the menu, in px.",
            "editType": "layout",
            "role": "object",
            "t": {
              "dflt": 0,
              "description": "Padding above, in px.",
              "valType": "number"
            },
            "r": {
              "dflt": 0,
              "description": "Padding on the right, in px.",
              "valType": "number"
            },
            "b": {
              "dflt": 0,
              "description": "Padding below, in px.",
              "valType": "number"
            },
            "l": {
              "dflt": 0,
              "description": "Padding on the left, in px.",
              "valType": "number"
            }
          },
          "font": {
            "description": "Button font. Defaults to `layout.font`.",
            "editType": "layout+plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number"
            },
            "color": {
              "description": "Text color.",
              "editType": "style",
              "valType": "color"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string"
            }
          },
          "bgcolor": {
            "editType": "modebar",
            "description": "Button background. Default: `paper_bgcolor`, or a tint of it on dark papers (the default look).",
            "valType": "color"
          },
          "bordercolor": {
            "editType": "modebar",
            "description": "Button border color. Default: Plotly's `#BEC8D9`, or a tint of the paper on dark papers.",
            "valType": "color"
          },
          "borderwidth": {
            "min": 0,
            "dflt": 1,
            "description": "Button border width, in px.",
            "valType": "number"
          },
          "name": {
            "editType": "none",
            "description": "Name of this updatemenu, used to reference it from a template via `templateitemname`.",
            "valType": "string"
          },
          "templateitemname": {
            "editType": "plot",
            "description": "Name of a template updatemenu to inherit from. If no template item matches, this updatemenu is hidden (`visible: false`).",
            "valType": "string"
          }
        }
      },
      "hoverdistance": {
        "min": -1,
        "dflt": 20,
        "editType": "none",
        "description": "Maximum distance (px) from the pointer to a point for it to be hovered. `-1` means no limit; `0` turns hover off for area-like traces only.",
        "valType": "number"
      },
      "spikedistance": {
        "min": -1,
        "dflt": -1,
        "editType": "none",
        "description": "Maximum distance (px) for spikelines (E3.10). `-1` means no limit.",
        "valType": "number"
      },
      "clickmode": {
        "flags": ["event", "select"],
        "extras": ["none"],
        "dflt": "event",
        "editType": "none",
        "description": "`event` emits `click` with the points under the pointer; `select` also selects them (shift adds to the selection).",
        "valType": "flaglist"
      },
      "selectdirection": {
        "values": ["h", "v", "d", "any"],
        "dflt": "any",
        "editType": "none",
        "description": "Box selection direction: horizontal only (`h`), vertical only (`v`), whichever the drag started in (`d`), or free (`any`).",
        "valType": "enumerated"
      },
      "hoverlabel": {
        "editType": "none",
        "description": "Default hover label style (traces override it).",
        "role": "object",
        "bgcolor": {
          "description": "Label background. Defaults to the point color.",
          "valType": "color"
        },
        "bordercolor": {
          "description": "Label border. Defaults to a color contrasting with the background.",
          "valType": "color"
        },
        "font": {
          "description": "Label font. Defaults to `layout.font` at 13 px.",
          "editType": "none",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "description": "Font size in CSS pixels.",
            "valType": "number"
          },
          "color": {
            "description": "Text color.",
            "valType": "color"
          }
        },
        "grouptitlefont": {
          "description": "Title font of unified labels (`x unified`, `y unified`).",
          "editType": "none",
          "role": "object",
          "family": {
            "noBlank": true,
            "strict": true,
            "description": "CSS font-family list.",
            "valType": "string"
          },
          "size": {
            "min": 1,
            "description": "Font size in CSS pixels.",
            "valType": "number"
          },
          "color": {
            "description": "Text color.",
            "valType": "color"
          }
        },
        "align": {
          "values": ["left", "right", "auto"],
          "dflt": "auto",
          "description": "Text alignment inside labels.",
          "valType": "enumerated"
        },
        "namelength": {
          "min": -1,
          "dflt": 15,
          "description": "Characters of the trace name shown (`-1`: all, `0`: none).",
          "valType": "integer"
        },
        "showarrow": {
          "dflt": true,
          "description": "Draw the arrow pointing at the point.",
          "valType": "boolean"
        }
      },
      "scene": {
        "editType": "plot",
        "description": "A 3D scene. `scene2`, `scene3`, … declare more, referenced from 3D traces' `scene` (`'scene2'`).",
        "role": "object",
        "subplot": "scene",
        "domain": {
          "editType": "plot",
          "description": "Extent of the scene as fractions of the plot area, or the `layout.grid` cell at `row` / `column`. Scenes without one sit side by side.",
          "role": "object",
          "x": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Horizontal extent `[start, end]` of this trace as fractions of the plot area. Defaults to the `layout.grid` column when `column` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "y": {
            "items": [
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              },
              {
                "min": 0,
                "max": 1,
                "editType": "plot",
                "valType": "number"
              }
            ],
            "dflt": [0, 1],
            "editType": "plot",
            "description": "Vertical extent `[start, end]` of this trace as fractions of the plot area (from the bottom). Defaults to the `layout.grid` row when `row` is set, else `[0, 1]`.",
            "valType": "info_array"
          },
          "row": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Row of the `layout.grid` cell this trace is placed in (0 = first row in `roworder`). Only used with a grid.",
            "valType": "integer"
          },
          "column": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Column of the `layout.grid` cell this trace is placed in (0 = leftmost). Only used with a grid.",
            "valType": "integer"
          }
        },
        "bgcolor": {
          "dflt": "rgba(0,0,0,0)",
          "editType": "plot",
          "description": "Background color of the scene (transparent: the paper shows through).",
          "valType": "color"
        },
        "camera": {
          "editType": "camera",
          "description": "The view of the scene. Orbiting, panning and zooming report it in a `relayout` event (`'scene.camera'`) when the gesture ends.",
          "role": "object",
          "eye": {
            "editType": "camera",
            "description": "Where the camera is, in scene units: the axis box spans `aspectratio` around the origin (`[-x/2, x/2]`, …).",
            "role": "object",
            "x": {
              "dflt": 1.25,
              "editType": "camera",
              "description": "x component.",
              "valType": "number"
            },
            "y": {
              "dflt": 1.25,
              "editType": "camera",
              "description": "y component.",
              "valType": "number"
            },
            "z": {
              "dflt": 1.25,
              "editType": "camera",
              "description": "z component.",
              "valType": "number"
            }
          },
          "center": {
            "editType": "camera",
            "description": "The point the camera looks at, in scene units.",
            "role": "object",
            "x": {
              "dflt": 0,
              "editType": "camera",
              "description": "x component.",
              "valType": "number"
            },
            "y": {
              "dflt": 0,
              "editType": "camera",
              "description": "y component.",
              "valType": "number"
            },
            "z": {
              "dflt": 0,
              "editType": "camera",
              "description": "z component.",
              "valType": "number"
            }
          },
          "up": {
            "editType": "camera",
            "description": "The direction that points up on the screen. The default puts the z axis up.",
            "role": "object",
            "x": {
              "dflt": 0,
              "editType": "camera",
              "description": "x component.",
              "valType": "number"
            },
            "y": {
              "dflt": 0,
              "editType": "camera",
              "description": "y component.",
              "valType": "number"
            },
            "z": {
              "dflt": 1,
              "editType": "camera",
              "description": "z component.",
              "valType": "number"
            }
          },
          "projection": {
            "editType": "camera",
            "description": "The camera projection.",
            "role": "object",
            "type": {
              "values": ["perspective", "orthographic"],
              "dflt": "perspective",
              "editType": "camera",
              "description": "Perspective (45° vertical field of view) or orthographic projection (the view spans 2 scene units vertically; zooming scales `aspectratio`).",
              "valType": "enumerated"
            }
          }
        },
        "aspectmode": {
          "values": ["auto", "cube", "data", "manual"],
          "dflt": "auto",
          "editType": "plot",
          "description": "`cube`: the axes form a cube whatever their ranges. `data`: axis lengths follow their data spans (per axis type). `manual`: `aspectratio`. `auto` (default; `manual` when `aspectratio` is given): `data` unless one axis would be more than 4 times longer than another, then `cube`.",
          "valType": "enumerated"
        },
        "aspectratio": {
          "editType": "plot",
          "description": "Relative lengths of the axes (with `aspectmode: manual`). The full layout holds the ratio in use for every mode.",
          "role": "object",
          "x": {
            "min": 0,
            "editType": "plot",
            "description": "Relative length of the x axis.",
            "valType": "number"
          },
          "y": {
            "min": 0,
            "editType": "plot",
            "description": "Relative length of the y axis.",
            "valType": "number"
          },
          "z": {
            "min": 0,
            "editType": "plot",
            "description": "Relative length of the z axis.",
            "valType": "number"
          }
        },
        "xaxis": {
          "editType": "plot",
          "description": "An axis of a 3D scene.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis (line, ticks, labels, grid and title). A hidden axis still maps data to pixels.",
            "valType": "boolean"
          },
          "color": {
            "dflt": "#444",
            "editType": "plot",
            "description": "Base color of the axis: the default for `linecolor`, `tickcolor`, `zerolinecolor`, `dividercolor` and (when changed) the tick-label and title font colors.",
            "valType": "color"
          },
          "autorange": {
            "values": [true, false, "reversed", "min reversed", "max reversed", "min", "max"],
            "dflt": true,
            "editType": "plot",
            "description": "Whether the range is computed from the data. `reversed` autoranges with the axis flipped. `min`/`max` autorange only that end and take the other from `range` (`min reversed`/`max reversed` also flip the axis). Defaults to `false` when a full `range` is given, to `min`/`max` when one end of `range` is `null`, and to `reversed` on a y axis only `image` traces use (row 0 at the top, as in Plotly).",
            "valType": "enumerated"
          },
          "autorangeoptions": {
            "editType": "plot",
            "description": "Constraints applied to the computed autorange.",
            "role": "object",
            "minallowed": {
              "description": "The autoranged minimum is exactly this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "maxallowed": {
              "description": "The autoranged maximum is exactly this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "clipmin": {
              "description": "The autoranged minimum is at least this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "clipmax": {
              "description": "The autoranged maximum is at most this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "include": {
              "arrayOk": true,
              "description": "Value(s) the autorange must include (data units).",
              "valType": "any",
              "editType": "plot"
            }
          },
          "rangemode": {
            "values": ["normal", "tozero", "nonnegative"],
            "dflt": "normal",
            "editType": "plot",
            "description": "Linear axes only. `tozero` extends the autorange to include 0; `nonnegative` keeps it ≥ 0.",
            "valType": "enumerated"
          },
          "range": {
            "items": [
              {
                "dflt": null,
                "valType": "any"
              },
              {
                "dflt": null,
                "valType": "any"
              }
            ],
            "editType": "plot",
            "animatable": true,
            "description": "Visible range `[start, end]` in data units (numbers, dates or category names; exponents on log axes, as in Plotly). Setting it turns `autorange` off; `null` for one end autoranges that end only.",
            "valType": "info_array"
          },
          "minallowed": {
            "editType": "plot",
            "description": "Lowest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
            "valType": "any"
          },
          "maxallowed": {
            "editType": "plot",
            "description": "Highest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
            "valType": "any"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "plot",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "plot",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "plot",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "plot",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "plot",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "plot",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "mirror": {
            "values": [true, "ticks", false, "all", "allticks"],
            "dflt": false,
            "editType": "plot",
            "description": "Repeat the axis line on the opposite side of the plot area: `true` (line), `ticks` (line and ticks); `all`/`allticks` do the same on every subplot sharing this axis.",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "plot",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "plot",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "plot",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string",
              "editType": "plot"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number",
              "editType": "plot"
            },
            "color": {
              "description": "Text color.",
              "valType": "color",
              "editType": "plot"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer",
              "editType": "plot"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist",
              "editType": "plot"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string",
              "editType": "plot"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "plot",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "plot",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "plot",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "tickformat": {
            "dflt": "",
            "editType": "plot",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickformatstops": {
            "editType": "plot",
            "description": "Zoom-dependent tick formats: the first enabled stop whose `dtickrange` contains the current tick step replaces `tickformat`.",
            "itemName": "tickformatstop",
            "role": "items",
            "items": {
              "editType": "plot",
              "role": "object",
              "enabled": {
                "dflt": true,
                "description": "Whether this stop is used.",
                "valType": "boolean",
                "editType": "plot"
              },
              "visible": {
                "dflt": true,
                "description": "Set to `false` (by the template machinery) when `templateitemname` names no template stop; hidden stops are ignored like disabled ones.",
                "valType": "boolean",
                "editType": "plot"
              },
              "dtickrange": {
                "items": [
                  {
                    "dflt": null,
                    "valType": "any"
                  },
                  {
                    "dflt": null,
                    "valType": "any"
                  }
                ],
                "description": "Range `[min, max]` of the tick step (`dtick`) this format applies to; `null` for an open end. Date steps are in ms or `M<n>`.",
                "valType": "info_array",
                "editType": "plot"
              },
              "value": {
                "dflt": "",
                "description": "The `tickformat` to use while the tick step is inside `dtickrange`.",
                "valType": "string",
                "editType": "plot"
              },
              "name": {
                "editType": "plot",
                "description": "Name of this tickformatstop, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template tickformatstop to inherit from. If no template item matches, this tickformatstop is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "showline": {
            "dflt": false,
            "editType": "plot",
            "description": "Draw the axis line.",
            "valType": "boolean"
          },
          "linecolor": {
            "editType": "plot",
            "description": "Axis line color. Defaults to `color`.",
            "valType": "color"
          },
          "linewidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Axis line width in px.",
            "valType": "number"
          },
          "showgrid": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw grid lines at each tick.",
            "valType": "boolean"
          },
          "gridcolor": {
            "dflt": "#eee",
            "editType": "plot",
            "description": "Grid line color.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Grid line width in px.",
            "valType": "number"
          },
          "zeroline": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw a line at 0 (linear axes whose range contains 0).",
            "valType": "boolean"
          },
          "zerolinecolor": {
            "editType": "plot",
            "description": "Zero line color. Defaults to `color`.",
            "valType": "color"
          },
          "zerolinewidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Zero line width in px.",
            "valType": "number"
          },
          "type": {
            "values": ["-", "linear", "log", "date", "category"],
            "dflt": "-",
            "editType": "calc",
            "description": "Axis type. `'-'` detects it from this axis' data (`x`, `y` or `z`) of the first trace on the scene.",
            "valType": "enumerated"
          },
          "autotypenumbers": {
            "values": ["convert types", "strict"],
            "dflt": "convert types",
            "editType": "calc",
            "description": "How type detection treats numeric strings: `convert types` counts `'12'` as a number; `strict` counts only real numbers, so numeric strings make a `category` axis.",
            "valType": "enumerated"
          },
          "categoryorder": {
            "values": [
              "trace",
              "category ascending",
              "category descending",
              "array",
              "total ascending",
              "total descending",
              "min ascending",
              "min descending",
              "max ascending",
              "max descending",
              "sum ascending",
              "sum descending",
              "mean ascending",
              "mean descending",
              "median ascending",
              "median descending"
            ],
            "editType": "calc",
            "description": "Order of categories: as they first appear in the traces (`trace`), alphabetical/numerical (`category ascending|descending`), `categoryarray` first (`array`), or by an aggregate of the trace values per category (`total`, `min`, `max`, `sum`, `mean`, `median`). Defaults to `array` when `categoryarray` is set, else `trace`.",
            "valType": "enumerated"
          },
          "categoryarray": {
            "editType": "calc",
            "description": "Category order for `categoryorder: array`. Categories not listed follow in trace order.",
            "valType": "data_array"
          },
          "hoverformat": {
            "dflt": "",
            "editType": "none",
            "description": "Format of this axis’ values in hover labels (same syntax as `tickformat`). Empty uses the tick format with extra precision.",
            "valType": "string"
          },
          "title": {
            "editType": "plot",
            "description": "Axis title.",
            "role": "object",
            "text": {
              "editType": "plot",
              "description": "Axis title, drawn beside the axis. Defaults to the axis letter (`'x'`).",
              "valType": "string"
            },
            "font": {
              "description": "Axis title font. Defaults to `layout.font` with 1.2× size.",
              "editType": "plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string",
                "editType": "plot"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number",
                "editType": "plot"
              },
              "color": {
                "description": "Text color.",
                "valType": "color",
                "editType": "plot"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer",
                "editType": "plot"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist",
                "editType": "plot"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string",
                "editType": "plot"
              }
            }
          },
          "showbackground": {
            "dflt": false,
            "editType": "plot",
            "description": "Fill this axis' wall (the back plane perpendicular to it) with `backgroundcolor`.",
            "valType": "boolean"
          },
          "backgroundcolor": {
            "dflt": "rgba(204, 204, 204, 0.5)",
            "editType": "plot",
            "description": "Color of this axis' wall.",
            "valType": "color"
          },
          "showaxeslabels": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis title.",
            "valType": "boolean"
          },
          "showspikes": {
            "dflt": true,
            "editType": "plot",
            "description": "On hover, draw spikes from the hovered point to this axis' walls (3D hover, plan E14.1d).",
            "valType": "boolean"
          },
          "spikesides": {
            "dflt": true,
            "editType": "plot",
            "description": "Extend the spikes from the walls to the edges of the axis box.",
            "valType": "boolean"
          },
          "spikethickness": {
            "min": 0,
            "dflt": 2,
            "editType": "plot",
            "description": "Thickness of the spikes, px.",
            "valType": "number"
          },
          "spikecolor": {
            "editType": "plot",
            "description": "Color of the spikes. Defaults to the axis `color`.",
            "valType": "color"
          }
        },
        "yaxis": {
          "editType": "plot",
          "description": "An axis of a 3D scene.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis (line, ticks, labels, grid and title). A hidden axis still maps data to pixels.",
            "valType": "boolean"
          },
          "color": {
            "dflt": "#444",
            "editType": "plot",
            "description": "Base color of the axis: the default for `linecolor`, `tickcolor`, `zerolinecolor`, `dividercolor` and (when changed) the tick-label and title font colors.",
            "valType": "color"
          },
          "autorange": {
            "values": [true, false, "reversed", "min reversed", "max reversed", "min", "max"],
            "dflt": true,
            "editType": "plot",
            "description": "Whether the range is computed from the data. `reversed` autoranges with the axis flipped. `min`/`max` autorange only that end and take the other from `range` (`min reversed`/`max reversed` also flip the axis). Defaults to `false` when a full `range` is given, to `min`/`max` when one end of `range` is `null`, and to `reversed` on a y axis only `image` traces use (row 0 at the top, as in Plotly).",
            "valType": "enumerated"
          },
          "autorangeoptions": {
            "editType": "plot",
            "description": "Constraints applied to the computed autorange.",
            "role": "object",
            "minallowed": {
              "description": "The autoranged minimum is exactly this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "maxallowed": {
              "description": "The autoranged maximum is exactly this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "clipmin": {
              "description": "The autoranged minimum is at least this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "clipmax": {
              "description": "The autoranged maximum is at most this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "include": {
              "arrayOk": true,
              "description": "Value(s) the autorange must include (data units).",
              "valType": "any",
              "editType": "plot"
            }
          },
          "rangemode": {
            "values": ["normal", "tozero", "nonnegative"],
            "dflt": "normal",
            "editType": "plot",
            "description": "Linear axes only. `tozero` extends the autorange to include 0; `nonnegative` keeps it ≥ 0.",
            "valType": "enumerated"
          },
          "range": {
            "items": [
              {
                "dflt": null,
                "valType": "any"
              },
              {
                "dflt": null,
                "valType": "any"
              }
            ],
            "editType": "plot",
            "animatable": true,
            "description": "Visible range `[start, end]` in data units (numbers, dates or category names; exponents on log axes, as in Plotly). Setting it turns `autorange` off; `null` for one end autoranges that end only.",
            "valType": "info_array"
          },
          "minallowed": {
            "editType": "plot",
            "description": "Lowest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
            "valType": "any"
          },
          "maxallowed": {
            "editType": "plot",
            "description": "Highest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
            "valType": "any"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "plot",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "plot",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "plot",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "plot",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "plot",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "plot",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "mirror": {
            "values": [true, "ticks", false, "all", "allticks"],
            "dflt": false,
            "editType": "plot",
            "description": "Repeat the axis line on the opposite side of the plot area: `true` (line), `ticks` (line and ticks); `all`/`allticks` do the same on every subplot sharing this axis.",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "plot",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "plot",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "plot",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string",
              "editType": "plot"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number",
              "editType": "plot"
            },
            "color": {
              "description": "Text color.",
              "valType": "color",
              "editType": "plot"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer",
              "editType": "plot"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist",
              "editType": "plot"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string",
              "editType": "plot"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "plot",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "plot",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "plot",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "tickformat": {
            "dflt": "",
            "editType": "plot",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickformatstops": {
            "editType": "plot",
            "description": "Zoom-dependent tick formats: the first enabled stop whose `dtickrange` contains the current tick step replaces `tickformat`.",
            "itemName": "tickformatstop",
            "role": "items",
            "items": {
              "editType": "plot",
              "role": "object",
              "enabled": {
                "dflt": true,
                "description": "Whether this stop is used.",
                "valType": "boolean",
                "editType": "plot"
              },
              "visible": {
                "dflt": true,
                "description": "Set to `false` (by the template machinery) when `templateitemname` names no template stop; hidden stops are ignored like disabled ones.",
                "valType": "boolean",
                "editType": "plot"
              },
              "dtickrange": {
                "items": [
                  {
                    "dflt": null,
                    "valType": "any"
                  },
                  {
                    "dflt": null,
                    "valType": "any"
                  }
                ],
                "description": "Range `[min, max]` of the tick step (`dtick`) this format applies to; `null` for an open end. Date steps are in ms or `M<n>`.",
                "valType": "info_array",
                "editType": "plot"
              },
              "value": {
                "dflt": "",
                "description": "The `tickformat` to use while the tick step is inside `dtickrange`.",
                "valType": "string",
                "editType": "plot"
              },
              "name": {
                "editType": "plot",
                "description": "Name of this tickformatstop, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template tickformatstop to inherit from. If no template item matches, this tickformatstop is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "showline": {
            "dflt": false,
            "editType": "plot",
            "description": "Draw the axis line.",
            "valType": "boolean"
          },
          "linecolor": {
            "editType": "plot",
            "description": "Axis line color. Defaults to `color`.",
            "valType": "color"
          },
          "linewidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Axis line width in px.",
            "valType": "number"
          },
          "showgrid": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw grid lines at each tick.",
            "valType": "boolean"
          },
          "gridcolor": {
            "dflt": "#eee",
            "editType": "plot",
            "description": "Grid line color.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Grid line width in px.",
            "valType": "number"
          },
          "zeroline": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw a line at 0 (linear axes whose range contains 0).",
            "valType": "boolean"
          },
          "zerolinecolor": {
            "editType": "plot",
            "description": "Zero line color. Defaults to `color`.",
            "valType": "color"
          },
          "zerolinewidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Zero line width in px.",
            "valType": "number"
          },
          "type": {
            "values": ["-", "linear", "log", "date", "category"],
            "dflt": "-",
            "editType": "calc",
            "description": "Axis type. `'-'` detects it from this axis' data (`x`, `y` or `z`) of the first trace on the scene.",
            "valType": "enumerated"
          },
          "autotypenumbers": {
            "values": ["convert types", "strict"],
            "dflt": "convert types",
            "editType": "calc",
            "description": "How type detection treats numeric strings: `convert types` counts `'12'` as a number; `strict` counts only real numbers, so numeric strings make a `category` axis.",
            "valType": "enumerated"
          },
          "categoryorder": {
            "values": [
              "trace",
              "category ascending",
              "category descending",
              "array",
              "total ascending",
              "total descending",
              "min ascending",
              "min descending",
              "max ascending",
              "max descending",
              "sum ascending",
              "sum descending",
              "mean ascending",
              "mean descending",
              "median ascending",
              "median descending"
            ],
            "editType": "calc",
            "description": "Order of categories: as they first appear in the traces (`trace`), alphabetical/numerical (`category ascending|descending`), `categoryarray` first (`array`), or by an aggregate of the trace values per category (`total`, `min`, `max`, `sum`, `mean`, `median`). Defaults to `array` when `categoryarray` is set, else `trace`.",
            "valType": "enumerated"
          },
          "categoryarray": {
            "editType": "calc",
            "description": "Category order for `categoryorder: array`. Categories not listed follow in trace order.",
            "valType": "data_array"
          },
          "hoverformat": {
            "dflt": "",
            "editType": "none",
            "description": "Format of this axis’ values in hover labels (same syntax as `tickformat`). Empty uses the tick format with extra precision.",
            "valType": "string"
          },
          "title": {
            "editType": "plot",
            "description": "Axis title.",
            "role": "object",
            "text": {
              "editType": "plot",
              "description": "Axis title, drawn beside the axis. Defaults to the axis letter (`'x'`).",
              "valType": "string"
            },
            "font": {
              "description": "Axis title font. Defaults to `layout.font` with 1.2× size.",
              "editType": "plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string",
                "editType": "plot"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number",
                "editType": "plot"
              },
              "color": {
                "description": "Text color.",
                "valType": "color",
                "editType": "plot"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer",
                "editType": "plot"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist",
                "editType": "plot"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string",
                "editType": "plot"
              }
            }
          },
          "showbackground": {
            "dflt": false,
            "editType": "plot",
            "description": "Fill this axis' wall (the back plane perpendicular to it) with `backgroundcolor`.",
            "valType": "boolean"
          },
          "backgroundcolor": {
            "dflt": "rgba(204, 204, 204, 0.5)",
            "editType": "plot",
            "description": "Color of this axis' wall.",
            "valType": "color"
          },
          "showaxeslabels": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis title.",
            "valType": "boolean"
          },
          "showspikes": {
            "dflt": true,
            "editType": "plot",
            "description": "On hover, draw spikes from the hovered point to this axis' walls (3D hover, plan E14.1d).",
            "valType": "boolean"
          },
          "spikesides": {
            "dflt": true,
            "editType": "plot",
            "description": "Extend the spikes from the walls to the edges of the axis box.",
            "valType": "boolean"
          },
          "spikethickness": {
            "min": 0,
            "dflt": 2,
            "editType": "plot",
            "description": "Thickness of the spikes, px.",
            "valType": "number"
          },
          "spikecolor": {
            "editType": "plot",
            "description": "Color of the spikes. Defaults to the axis `color`.",
            "valType": "color"
          }
        },
        "zaxis": {
          "editType": "plot",
          "description": "An axis of a 3D scene.",
          "role": "object",
          "visible": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis (line, ticks, labels, grid and title). A hidden axis still maps data to pixels.",
            "valType": "boolean"
          },
          "color": {
            "dflt": "#444",
            "editType": "plot",
            "description": "Base color of the axis: the default for `linecolor`, `tickcolor`, `zerolinecolor`, `dividercolor` and (when changed) the tick-label and title font colors.",
            "valType": "color"
          },
          "autorange": {
            "values": [true, false, "reversed", "min reversed", "max reversed", "min", "max"],
            "dflt": true,
            "editType": "plot",
            "description": "Whether the range is computed from the data. `reversed` autoranges with the axis flipped. `min`/`max` autorange only that end and take the other from `range` (`min reversed`/`max reversed` also flip the axis). Defaults to `false` when a full `range` is given, to `min`/`max` when one end of `range` is `null`, and to `reversed` on a y axis only `image` traces use (row 0 at the top, as in Plotly).",
            "valType": "enumerated"
          },
          "autorangeoptions": {
            "editType": "plot",
            "description": "Constraints applied to the computed autorange.",
            "role": "object",
            "minallowed": {
              "description": "The autoranged minimum is exactly this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "maxallowed": {
              "description": "The autoranged maximum is exactly this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "clipmin": {
              "description": "The autoranged minimum is at least this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "clipmax": {
              "description": "The autoranged maximum is at most this value (data units).",
              "valType": "any",
              "editType": "plot"
            },
            "include": {
              "arrayOk": true,
              "description": "Value(s) the autorange must include (data units).",
              "valType": "any",
              "editType": "plot"
            }
          },
          "rangemode": {
            "values": ["normal", "tozero", "nonnegative"],
            "dflt": "normal",
            "editType": "plot",
            "description": "Linear axes only. `tozero` extends the autorange to include 0; `nonnegative` keeps it ≥ 0.",
            "valType": "enumerated"
          },
          "range": {
            "items": [
              {
                "dflt": null,
                "valType": "any"
              },
              {
                "dflt": null,
                "valType": "any"
              }
            ],
            "editType": "plot",
            "animatable": true,
            "description": "Visible range `[start, end]` in data units (numbers, dates or category names; exponents on log axes, as in Plotly). Setting it turns `autorange` off; `null` for one end autoranges that end only.",
            "valType": "info_array"
          },
          "minallowed": {
            "editType": "plot",
            "description": "Lowest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
            "valType": "any"
          },
          "maxallowed": {
            "editType": "plot",
            "description": "Highest value zoom and pan may reach, in range units (like `range`: exponents on log axes). Also caps the autorange.",
            "valType": "any"
          },
          "tickmode": {
            "values": ["auto", "linear", "array", "sync"],
            "editType": "plot",
            "description": "`auto` picks up to `nticks` round ticks; `linear` places ticks from `tick0` every `dtick`; `array` uses `tickvals`/`ticktext`; `sync` aligns with the overlaid axis (reserved; behaves as `auto`). Defaults to `array` when `tickvals` is set, `linear` when `dtick` is set, else `auto`.",
            "valType": "enumerated"
          },
          "nticks": {
            "min": 0,
            "dflt": 0,
            "editType": "plot",
            "description": "Maximum number of ticks for `tickmode: auto` (the actual number may be lower so steps stay round). 0 picks it from the axis length.",
            "valType": "integer"
          },
          "tick0": {
            "editType": "plot",
            "description": "Position of one tick for `tickmode: linear` (data units; a date on date axes, an exponent on log axes unless `dtick` is `L<f>`). Defaults to 0, or 2000-01-01 on date axes.",
            "valType": "any"
          },
          "dtick": {
            "editType": "plot",
            "description": "Tick step. Linear axes: a positive number. Log axes: an integer `n` (a tick every `n` decades), `L<f>` (linear steps of `f` in data units, e.g. `L0.5`), `D1` (every digit) or `D2` (1, 2 and 5). Date axes: milliseconds, or `M<n>` for `n` months (`M12` for years).",
            "valType": "any"
          },
          "tickvals": {
            "editType": "plot",
            "description": "Tick positions for `tickmode: array` (data units).",
            "valType": "data_array"
          },
          "ticktext": {
            "editType": "plot",
            "description": "Tick labels for `tickvals`. Missing entries are formatted as usual.",
            "valType": "data_array"
          },
          "ticks": {
            "values": ["outside", "inside", ""],
            "dflt": "",
            "editType": "plot",
            "description": "Draw tick marks outside or inside the plot area, or not at all (`''`).",
            "valType": "enumerated"
          },
          "mirror": {
            "values": [true, "ticks", false, "all", "allticks"],
            "dflt": false,
            "editType": "plot",
            "description": "Repeat the axis line on the opposite side of the plot area: `true` (line), `ticks` (line and ticks); `all`/`allticks` do the same on every subplot sharing this axis.",
            "valType": "enumerated"
          },
          "ticklen": {
            "min": 0,
            "dflt": 5,
            "editType": "plot",
            "description": "Tick length in px.",
            "valType": "number"
          },
          "tickwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Tick width in px.",
            "valType": "number"
          },
          "tickcolor": {
            "editType": "plot",
            "description": "Tick color. Defaults to `color`.",
            "valType": "color"
          },
          "showticklabels": {
            "dflt": true,
            "editType": "plot",
            "description": "Show tick labels.",
            "valType": "boolean"
          },
          "tickfont": {
            "description": "Tick-label font. Defaults to `layout.font`.",
            "editType": "plot",
            "role": "object",
            "family": {
              "noBlank": true,
              "strict": true,
              "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
              "valType": "string",
              "editType": "plot"
            },
            "size": {
              "min": 1,
              "description": "Font size in CSS pixels.",
              "valType": "number",
              "editType": "plot"
            },
            "color": {
              "description": "Text color.",
              "valType": "color",
              "editType": "plot"
            },
            "weight": {
              "min": 1,
              "max": 1000,
              "extras": ["normal", "bold"],
              "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
              "valType": "integer",
              "editType": "plot"
            },
            "style": {
              "values": ["normal", "italic"],
              "description": "Font style.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "variant": {
              "values": [
                "normal",
                "small-caps",
                "all-small-caps",
                "all-petite-caps",
                "petite-caps",
                "unicase"
              ],
              "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "textcase": {
              "values": ["normal", "word caps", "upper", "lower"],
              "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
              "valType": "enumerated",
              "editType": "plot"
            },
            "lineposition": {
              "flags": ["under", "over", "through"],
              "extras": ["none"],
              "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
              "valType": "flaglist",
              "editType": "plot"
            },
            "shadow": {
              "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
              "valType": "string",
              "editType": "plot"
            }
          },
          "tickangle": {
            "extras": ["auto"],
            "dflt": "auto",
            "editType": "plot",
            "description": "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.",
            "valType": "angle"
          },
          "tickprefix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text before each tick label.",
            "valType": "string"
          },
          "showtickprefix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `tickprefix`.",
            "valType": "enumerated"
          },
          "ticksuffix": {
            "dflt": "",
            "editType": "plot",
            "description": "Text after each tick label.",
            "valType": "string"
          },
          "showticksuffix": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels get `ticksuffix`.",
            "valType": "enumerated"
          },
          "showexponent": {
            "values": ["all", "first", "last", "none"],
            "dflt": "all",
            "editType": "plot",
            "description": "Which tick labels show the exponent.",
            "valType": "enumerated"
          },
          "exponentformat": {
            "values": ["none", "e", "E", "power", "SI", "B"],
            "dflt": "B",
            "editType": "plot",
            "description": "How large and small numbers are written: `none` (1000000), `e` (1e+6), `E` (1E+6), `power` (1×10⁶), `SI` (1M), `B` (like SI but 1B for 10⁹).",
            "valType": "enumerated"
          },
          "minexponent": {
            "min": 0,
            "dflt": 3,
            "editType": "plot",
            "description": "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.",
            "valType": "number"
          },
          "separatethousands": {
            "dflt": false,
            "editType": "plot",
            "description": "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.",
            "valType": "boolean"
          },
          "tickformat": {
            "dflt": "",
            "editType": "plot",
            "description": "Tick-label format: a [d3-format](https://github.com/d3/d3-format) specifier for numbers (`.2f`, `~s`, `$,`) or a [d3-time-format](https://github.com/d3/d3-time-format) specifier for dates (`%b %Y`), plus `%{n}f` for `n` digits of fractional seconds and `%h` for the half year. Empty picks a format automatically.",
            "valType": "string"
          },
          "tickformatstops": {
            "editType": "plot",
            "description": "Zoom-dependent tick formats: the first enabled stop whose `dtickrange` contains the current tick step replaces `tickformat`.",
            "itemName": "tickformatstop",
            "role": "items",
            "items": {
              "editType": "plot",
              "role": "object",
              "enabled": {
                "dflt": true,
                "description": "Whether this stop is used.",
                "valType": "boolean",
                "editType": "plot"
              },
              "visible": {
                "dflt": true,
                "description": "Set to `false` (by the template machinery) when `templateitemname` names no template stop; hidden stops are ignored like disabled ones.",
                "valType": "boolean",
                "editType": "plot"
              },
              "dtickrange": {
                "items": [
                  {
                    "dflt": null,
                    "valType": "any"
                  },
                  {
                    "dflt": null,
                    "valType": "any"
                  }
                ],
                "description": "Range `[min, max]` of the tick step (`dtick`) this format applies to; `null` for an open end. Date steps are in ms or `M<n>`.",
                "valType": "info_array",
                "editType": "plot"
              },
              "value": {
                "dflt": "",
                "description": "The `tickformat` to use while the tick step is inside `dtickrange`.",
                "valType": "string",
                "editType": "plot"
              },
              "name": {
                "editType": "plot",
                "description": "Name of this tickformatstop, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template tickformatstop to inherit from. If no template item matches, this tickformatstop is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "showline": {
            "dflt": false,
            "editType": "plot",
            "description": "Draw the axis line.",
            "valType": "boolean"
          },
          "linecolor": {
            "editType": "plot",
            "description": "Axis line color. Defaults to `color`.",
            "valType": "color"
          },
          "linewidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Axis line width in px.",
            "valType": "number"
          },
          "showgrid": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw grid lines at each tick.",
            "valType": "boolean"
          },
          "gridcolor": {
            "dflt": "#eee",
            "editType": "plot",
            "description": "Grid line color.",
            "valType": "color"
          },
          "gridwidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Grid line width in px.",
            "valType": "number"
          },
          "zeroline": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw a line at 0 (linear axes whose range contains 0).",
            "valType": "boolean"
          },
          "zerolinecolor": {
            "editType": "plot",
            "description": "Zero line color. Defaults to `color`.",
            "valType": "color"
          },
          "zerolinewidth": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Zero line width in px.",
            "valType": "number"
          },
          "type": {
            "values": ["-", "linear", "log", "date", "category"],
            "dflt": "-",
            "editType": "calc",
            "description": "Axis type. `'-'` detects it from this axis' data (`x`, `y` or `z`) of the first trace on the scene.",
            "valType": "enumerated"
          },
          "autotypenumbers": {
            "values": ["convert types", "strict"],
            "dflt": "convert types",
            "editType": "calc",
            "description": "How type detection treats numeric strings: `convert types` counts `'12'` as a number; `strict` counts only real numbers, so numeric strings make a `category` axis.",
            "valType": "enumerated"
          },
          "categoryorder": {
            "values": [
              "trace",
              "category ascending",
              "category descending",
              "array",
              "total ascending",
              "total descending",
              "min ascending",
              "min descending",
              "max ascending",
              "max descending",
              "sum ascending",
              "sum descending",
              "mean ascending",
              "mean descending",
              "median ascending",
              "median descending"
            ],
            "editType": "calc",
            "description": "Order of categories: as they first appear in the traces (`trace`), alphabetical/numerical (`category ascending|descending`), `categoryarray` first (`array`), or by an aggregate of the trace values per category (`total`, `min`, `max`, `sum`, `mean`, `median`). Defaults to `array` when `categoryarray` is set, else `trace`.",
            "valType": "enumerated"
          },
          "categoryarray": {
            "editType": "calc",
            "description": "Category order for `categoryorder: array`. Categories not listed follow in trace order.",
            "valType": "data_array"
          },
          "hoverformat": {
            "dflt": "",
            "editType": "none",
            "description": "Format of this axis’ values in hover labels (same syntax as `tickformat`). Empty uses the tick format with extra precision.",
            "valType": "string"
          },
          "title": {
            "editType": "plot",
            "description": "Axis title.",
            "role": "object",
            "text": {
              "editType": "plot",
              "description": "Axis title, drawn beside the axis. Defaults to the axis letter (`'x'`).",
              "valType": "string"
            },
            "font": {
              "description": "Axis title font. Defaults to `layout.font` with 1.2× size.",
              "editType": "plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string",
                "editType": "plot"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number",
                "editType": "plot"
              },
              "color": {
                "description": "Text color.",
                "valType": "color",
                "editType": "plot"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer",
                "editType": "plot"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated",
                "editType": "plot"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist",
                "editType": "plot"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string",
                "editType": "plot"
              }
            }
          },
          "showbackground": {
            "dflt": false,
            "editType": "plot",
            "description": "Fill this axis' wall (the back plane perpendicular to it) with `backgroundcolor`.",
            "valType": "boolean"
          },
          "backgroundcolor": {
            "dflt": "rgba(204, 204, 204, 0.5)",
            "editType": "plot",
            "description": "Color of this axis' wall.",
            "valType": "color"
          },
          "showaxeslabels": {
            "dflt": true,
            "editType": "plot",
            "description": "Draw the axis title.",
            "valType": "boolean"
          },
          "showspikes": {
            "dflt": true,
            "editType": "plot",
            "description": "On hover, draw spikes from the hovered point to this axis' walls (3D hover, plan E14.1d).",
            "valType": "boolean"
          },
          "spikesides": {
            "dflt": true,
            "editType": "plot",
            "description": "Extend the spikes from the walls to the edges of the axis box.",
            "valType": "boolean"
          },
          "spikethickness": {
            "min": 0,
            "dflt": 2,
            "editType": "plot",
            "description": "Thickness of the spikes, px.",
            "valType": "number"
          },
          "spikecolor": {
            "editType": "plot",
            "description": "Color of the spikes. Defaults to the axis `color`.",
            "valType": "color"
          }
        },
        "dragmode": {
          "values": ["orbit", "turntable", "zoom", "pan", false],
          "editType": "modebar",
          "description": "What dragging does: `orbit` rotates freely, `turntable` rotates about the z axis (keeping it up), `zoom` moves the camera closer, `pan` moves it sideways; `false` turns dragging off. Defaults to `layout.dragmode` when the figure has only 3D subplots and that is one of these, else `turntable` (or `orbit` when `camera.up` isn't the z axis).",
          "valType": "enumerated"
        },
        "hovermode": {
          "values": ["closest", false],
          "dflt": "closest",
          "editType": "modebar",
          "description": "Hover labels on the scene (`closest`) or none (`false`).",
          "valType": "enumerated"
        },
        "uirevision": {
          "editType": "none",
          "description": "Persistence of user-driven camera changes. Accepted for Plotly compatibility; `layout.uirevision` governs them.",
          "valType": "any"
        },
        "annotations": {
          "editType": "plot",
          "description": "Annotations anchored at 3D data points: 2D annotation text and arrows at the projected point, following the camera.",
          "itemName": "annotation",
          "role": "items",
          "items": {
            "role": "object",
            "visible": {
              "dflt": true,
              "description": "Draw this annotation.",
              "valType": "boolean"
            },
            "text": {
              "dflt": "",
              "description": "Text. `<br>` breaks lines; `<b>`/`<i>` around the whole text, `<sup>`/`<sub>` digits and entities are rendered, other tags are dropped until rich text (E2.10).",
              "valType": "string"
            },
            "textangle": {
              "dflt": 0,
              "description": "Rotation of the text box, degrees clockwise.",
              "valType": "angle"
            },
            "font": {
              "description": "Text font. Defaults to `layout.font`.",
              "editType": "layout+plot",
              "role": "object",
              "family": {
                "noBlank": true,
                "strict": true,
                "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                "valType": "string"
              },
              "size": {
                "min": 1,
                "description": "Font size in CSS pixels.",
                "valType": "number"
              },
              "color": {
                "description": "Text color.",
                "editType": "style",
                "valType": "color"
              },
              "weight": {
                "min": 1,
                "max": 1000,
                "extras": ["normal", "bold"],
                "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                "valType": "integer"
              },
              "style": {
                "values": ["normal", "italic"],
                "description": "Font style.",
                "valType": "enumerated"
              },
              "variant": {
                "values": [
                  "normal",
                  "small-caps",
                  "all-small-caps",
                  "all-petite-caps",
                  "petite-caps",
                  "unicase"
                ],
                "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                "valType": "enumerated"
              },
              "textcase": {
                "values": ["normal", "word caps", "upper", "lower"],
                "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                "valType": "enumerated"
              },
              "lineposition": {
                "flags": ["under", "over", "through"],
                "extras": ["none"],
                "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                "valType": "flaglist"
              },
              "shadow": {
                "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                "valType": "string"
              }
            },
            "width": {
              "min": 1,
              "description": "Box width (text area), px. Default: the text width.",
              "valType": "number"
            },
            "height": {
              "min": 1,
              "description": "Box height (text area), px. Default: the text height.",
              "valType": "number"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "dflt": 1,
              "description": "Opacity of the whole annotation.",
              "valType": "number"
            },
            "align": {
              "values": ["left", "center", "right"],
              "dflt": "center",
              "description": "Horizontal alignment of the lines inside the box.",
              "valType": "enumerated"
            },
            "valign": {
              "values": ["top", "middle", "bottom"],
              "dflt": "middle",
              "description": "Vertical alignment of the text inside the box (with `height`).",
              "valType": "enumerated"
            },
            "bgcolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Box background.",
              "valType": "color"
            },
            "bordercolor": {
              "dflt": "rgba(0,0,0,0)",
              "description": "Box border color.",
              "valType": "color"
            },
            "borderpad": {
              "min": 0,
              "dflt": 1,
              "description": "Padding between text and border, px.",
              "valType": "number"
            },
            "borderwidth": {
              "min": 0,
              "dflt": 1,
              "description": "Box border width, px.",
              "valType": "number"
            },
            "showarrow": {
              "dflt": true,
              "description": "Draw an arrow from the text to `x`/`y`; the text then sits at the tail (`ax`/`ay`).",
              "valType": "boolean"
            },
            "arrowcolor": {
              "description": "Arrow color. Defaults to `bordercolor` when visible, else `#444`.",
              "valType": "color"
            },
            "arrowhead": {
              "min": 0,
              "max": 8,
              "dflt": 1,
              "description": "End arrowhead: 0 none, 1 wide, 2 narrow, 3 barbed, 4–5 line-drawn, 6 circle, 7 square, 8 bar.",
              "valType": "integer"
            },
            "startarrowhead": {
              "min": 0,
              "max": 8,
              "dflt": 1,
              "description": "Start arrowhead (0–8).",
              "valType": "integer"
            },
            "arrowside": {
              "flags": ["end", "start"],
              "extras": ["none"],
              "dflt": "end",
              "description": "Which ends get an arrowhead.",
              "valType": "flaglist"
            },
            "arrowsize": {
              "min": 0.3,
              "dflt": 1,
              "description": "End arrowhead size, relative to `arrowwidth`.",
              "valType": "number"
            },
            "startarrowsize": {
              "min": 0.3,
              "dflt": 1,
              "description": "Start arrowhead size, relative to `arrowwidth`.",
              "valType": "number"
            },
            "arrowwidth": {
              "min": 0.1,
              "description": "Arrow line width, px. Defaults to 2 (twice a visible border width).",
              "valType": "number"
            },
            "standoff": {
              "min": 0,
              "dflt": 0,
              "description": "Gap between the arrowhead tip and `x`/`y`, px.",
              "valType": "number"
            },
            "startstandoff": {
              "min": 0,
              "dflt": 0,
              "description": "Gap between the text box and the start of the arrow, px.",
              "valType": "number"
            },
            "xanchor": {
              "values": ["auto", "left", "center", "right"],
              "dflt": "auto",
              "description": "Which side of the text box sits at the anchor (or tail). `auto`: `center` with an arrow or a data reference, else by thirds of `x`.",
              "valType": "enumerated"
            },
            "yanchor": {
              "values": ["auto", "top", "middle", "bottom"],
              "dflt": "auto",
              "description": "Which side of the text box sits at the anchor (or tail); `auto` as `xanchor`.",
              "valType": "enumerated"
            },
            "xshift": {
              "dflt": 0,
              "description": "Shift the whole annotation right, px.",
              "valType": "number"
            },
            "yshift": {
              "dflt": 0,
              "description": "Shift the whole annotation up, px.",
              "valType": "number"
            },
            "hovertext": {
              "description": "Hover text (declared; hover labels for annotations are not drawn yet).",
              "valType": "string"
            },
            "hoverlabel": {
              "description": "Hover label style (declared; not drawn yet).",
              "role": "object",
              "bgcolor": {
                "description": "Hover label background.",
                "valType": "color"
              },
              "bordercolor": {
                "description": "Hover label border.",
                "valType": "color"
              },
              "font": {
                "description": "Hover label font.",
                "editType": "layout+plot",
                "role": "object",
                "family": {
                  "noBlank": true,
                  "strict": true,
                  "description": "CSS font-family list. The renderer uses the first family it can load and falls back through the list.",
                  "valType": "string"
                },
                "size": {
                  "min": 1,
                  "description": "Font size in CSS pixels.",
                  "valType": "number"
                },
                "color": {
                  "description": "Text color.",
                  "editType": "style",
                  "valType": "color"
                },
                "weight": {
                  "min": 1,
                  "max": 1000,
                  "extras": ["normal", "bold"],
                  "description": "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.",
                  "valType": "integer"
                },
                "style": {
                  "values": ["normal", "italic"],
                  "description": "Font style.",
                  "valType": "enumerated"
                },
                "variant": {
                  "values": [
                    "normal",
                    "small-caps",
                    "all-small-caps",
                    "all-petite-caps",
                    "petite-caps",
                    "unicase"
                  ],
                  "description": "Capitals variant (CSS `font-variant-caps`). The SDF text renderer approximates small and petite caps with uppercase letters at a reduced size.",
                  "valType": "enumerated"
                },
                "textcase": {
                  "values": ["normal", "word caps", "upper", "lower"],
                  "description": "Letter case transform: `upper`, `lower`, `word caps` (first letter of each word), or `normal`.",
                  "valType": "enumerated"
                },
                "lineposition": {
                  "flags": ["under", "over", "through"],
                  "extras": ["none"],
                  "description": "Text decoration: `under`, `over` and/or `through` joined with `+` (e.g. `under+over`), or `none`.",
                  "valType": "flaglist"
                },
                "shadow": {
                  "description": "CSS `text-shadow` behind the text (`2px 2px 3px black`; only the first shadow is drawn), `none`, or `auto` for a thin halo in the contrast color of the text.",
                  "valType": "string"
                }
              }
            },
            "captureevents": {
              "description": "Take pointer events over the text box and emit `clickannotation` on click. Defaults to true with `hovertext`.",
              "valType": "boolean"
            },
            "x": {
              "description": "The x of the annotated point, in the scene x axis' data.",
              "valType": "any"
            },
            "y": {
              "description": "The y of the annotated point, in the scene y axis' data.",
              "valType": "any"
            },
            "z": {
              "description": "The z of the annotated point, in the scene z axis' data.",
              "valType": "any"
            },
            "ax": {
              "description": "Arrow tail (the text) x offset from the point, px. Default −10.",
              "valType": "number"
            },
            "ay": {
              "description": "Arrow tail (the text) y offset from the point, px, positive down. Default −30.",
              "valType": "number"
            },
            "name": {
              "editType": "none",
              "description": "Name of this annotation, used to reference it from a template via `templateitemname`.",
              "valType": "string"
            },
            "templateitemname": {
              "editType": "plot",
              "description": "Name of a template annotation to inherit from. If no template item matches, this annotation is hidden (`visible: false`).",
              "valType": "string"
            }
          }
        },
        "lighting": {
          "editType": "plot",
          "description": "The scene's lights (Holochart extension). Unset, traces are lit as in Plotly (each by its `lightposition`); set, these lights light every trace of the scene (Plotly's model scales them by the trace's `lighting`).",
          "role": "object",
          "ambient": {
            "editType": "plot",
            "description": "Light reaching every surface from every direction.",
            "role": "object",
            "color": {
              "dflt": "#fff",
              "editType": "plot",
              "description": "Ambient color.",
              "valType": "color"
            },
            "intensity": {
              "min": 0,
              "dflt": 0.8,
              "editType": "plot",
              "description": "Ambient intensity (1: the full color).",
              "valType": "number"
            }
          },
          "directional": {
            "editType": "plot",
            "description": "Directional lights (like the sun). Default: one light at Plotly's default `lightposition` (clip space `(1e5, 1e5, 0)`); `[]` for none.",
            "itemName": "light",
            "role": "items",
            "items": {
              "role": "object",
              "visible": {
                "dflt": true,
                "editType": "plot",
                "description": "Whether this light shines.",
                "valType": "boolean"
              },
              "color": {
                "dflt": "#fff",
                "editType": "plot",
                "description": "Light color.",
                "valType": "color"
              },
              "intensity": {
                "min": 0,
                "dflt": 0.8,
                "editType": "plot",
                "description": "Light intensity (1: the full color).",
                "valType": "number"
              },
              "position": {
                "editType": "plot",
                "description": "Where the light shines from (see `space`). Default `(1, 1, 1)` (`(1e5, 1e5, 0)` in clip space).",
                "role": "object",
                "x": {
                  "editType": "plot",
                  "description": "x component.",
                  "valType": "number"
                },
                "y": {
                  "editType": "plot",
                  "description": "y component.",
                  "valType": "number"
                },
                "z": {
                  "editType": "plot",
                  "description": "z component.",
                  "valType": "number"
                }
              },
              "space": {
                "values": ["scene", "camera", "clip"],
                "dflt": "scene",
                "editType": "plot",
                "description": "`scene`: a direction in scene units, fixed to the data (the light shines from `position` toward the scene's center). `camera`: a direction in view space (x right, y up, z toward the viewer), moving with the view. `clip`: Plotly's `lightposition` space, moving with the view.",
                "valType": "enumerated"
              },
              "castshadow": {
                "dflt": false,
                "editType": "plot",
                "description": "Cast shadows (from traces with `material.castshadow`, onto three.js material types with `material.receiveshadow` and the ground plane).",
                "valType": "boolean"
              },
              "name": {
                "editType": "none",
                "description": "Name of this light, used to reference it from a template via `templateitemname`.",
                "valType": "string"
              },
              "templateitemname": {
                "editType": "plot",
                "description": "Name of a template light to inherit from. If no template item matches, this light is hidden (`visible: false`).",
                "valType": "string"
              }
            }
          },
          "hemisphere": {
            "editType": "plot",
            "description": "Sky and ground light blended by the surfaces' orientation to the scene's z axis.",
            "role": "object",
            "skycolor": {
              "dflt": "#fff",
              "editType": "plot",
              "description": "Color from above.",
              "valType": "color"
            },
            "groundcolor": {
              "dflt": "#4d4d4d",
              "editType": "plot",
              "description": "Color from below.",
              "valType": "color"
            },
            "intensity": {
              "min": 0,
              "dflt": 0.5,
              "editType": "plot",
              "description": "Intensity. The hemisphere light is on when `hemisphere` is given.",
              "valType": "number"
            }
          },
          "environment": {
            "editType": "plot",
            "description": "Image-based lighting and reflections for the `standard`, `physical`, `phong` and `basic` material types: `'studio'`, `'city'` (built-in rooms) or the URL of an equirectangular image.",
            "valType": "string"
          },
          "environmentintensity": {
            "min": 0,
            "dflt": 1,
            "editType": "plot",
            "description": "Strength of the environment's light.",
            "valType": "number"
          },
          "shadows": {
            "editType": "plot",
            "description": "Shadows of lights with `castshadow`.",
            "role": "object",
            "ground": {
              "dflt": false,
              "editType": "plot",
              "description": "A ground plane catching shadows, below the scene's axis box.",
              "valType": "boolean"
            },
            "extent": {
              "min": 0,
              "editType": "plot",
              "description": "Half-size of the shadowed region, scene units. Default: large enough for the axis box.",
              "valType": "number"
            },
            "mapsize": {
              "min": 64,
              "max": 8192,
              "dflt": 1024,
              "editType": "plot",
              "description": "Shadow map size, px.",
              "valType": "integer"
            },
            "opacity": {
              "min": 0,
              "max": 1,
              "dflt": 0.3,
              "editType": "plot",
              "description": "Darkness of the ground plane's shadows.",
              "valType": "number"
            }
          }
        },
        "autorotate": {
          "editType": "camera",
          "description": "Turn the scene continuously, like a turntable (Holochart extension). The rotation pauses while the user moves the camera and carries on from the new view when the camera comes to rest; it runs only while the chart is on screen, and not at all with reduced motion (`prefers-reduced-motion`). The layout camera doesn't follow the rotation: `relayout` reports the camera when a gesture or `animateCamera` ends, or the rotation stops.",
          "role": "object",
          "speed": {
            "editType": "camera",
            "description": "Degrees per second the scene turns, counterclockwise seen from the positive end of `axis` (negative: clockwise). Default 15 when `autorotate` is given, else 0 (off).",
            "valType": "number"
          },
          "axis": {
            "values": ["x", "y", "z"],
            "dflt": "z",
            "editType": "camera",
            "description": "The axis the scene turns about, through the camera's `center`.",
            "valType": "enumerated"
          },
          "time": {
            "editType": "camera",
            "description": "Freeze the rotation at this many seconds after the start (the layout camera turned by `speed × time`): a fixed frame for exports and tests.",
            "valType": "number"
          }
        }
      },
      "view3d": {
        "editType": "plot",
        "description": "The 2.5D view (Holochart extension): every cartesian subplot in perspective, its plot area a tilted plane; axes, hover, zoom and selection keep working.",
        "role": "object",
        "enabled": {
          "dflt": false,
          "editType": "plot",
          "description": "Show the cartesian subplots in perspective (2.5D).",
          "valType": "boolean"
        },
        "tilt": {
          "min": -80,
          "max": 80,
          "dflt": 20,
          "editType": "camera",
          "animatable": true,
          "description": "Elevation of the view, degrees: positive looks from above (the tops of vertical bars show).",
          "valType": "number"
        },
        "rotation": {
          "min": -80,
          "max": 80,
          "dflt": -20,
          "editType": "camera",
          "animatable": true,
          "description": "Azimuth of the view, degrees: positive looks from the right (right sides show).",
          "valType": "number"
        },
        "perspective": {
          "min": 0,
          "max": 1,
          "dflt": 0.5,
          "editType": "camera",
          "animatable": true,
          "description": "Strength of the perspective: 0 is a parallel projection, 1 a strong one.",
          "valType": "number"
        },
        "interactive": {
          "dflt": true,
          "editType": "camera",
          "description": "With `dragmode` `'turntable'` or `'orbit'`, dragging the plot area turns the view.",
          "valType": "boolean"
        }
      }
    }
  },
  "config": {
    "attributes": {
      "editType": "plot",
      "description": "Chart configuration (non-visual behavior).",
      "role": "object",
      "responsive": {
        "dflt": false,
        "description": "Resize the chart when its container or the window resizes.",
        "valType": "boolean"
      },
      "staticPlot": {
        "dflt": false,
        "description": "Render once with no interactivity (no hover, zoom or modebar).",
        "valType": "boolean"
      },
      "displayModeBar": {
        "values": ["hover", true, false],
        "dflt": "hover",
        "description": "Show the modebar always (`true`), never (`false`) or on hover.",
        "valType": "enumerated"
      },
      "modeBarButtonsToRemove": {
        "items": {
          "valType": "string"
        },
        "freeLength": true,
        "dflt": [],
        "description": "Names of default modebar buttons to remove.",
        "valType": "info_array"
      },
      "modeBarButtonsToAdd": {
        "dflt": [],
        "description": "Extra modebar buttons: names of built-in buttons or custom button objects.",
        "valType": "any"
      },
      "displaylogo": {
        "dflt": true,
        "description": "Accepted for Plotly compatibility and ignored: the modebar has no logo.",
        "valType": "boolean"
      },
      "scrollZoom": {
        "flags": ["cartesian", "scene", "geo", "map"],
        "extras": [true, false],
        "dflt": "scene+geo+map",
        "description": "Which subplot kinds zoom on mouse wheel. `true`/`false` enable/disable all of them.",
        "valType": "flaglist"
      },
      "topojsonURL": {
        "dflt": "",
        "description": "Where the geo package fetches basemap files from (`<url>/world_110m.json`, …), in Plotly's topojson layout. Empty (the default) uses the data bundled with the package and fetches nothing; Plotly itself defaults to its CDN.",
        "valType": "string"
      },
      "doubleClick": {
        "values": [false, "reset", "autosize", "reset+autosize"],
        "dflt": "reset+autosize",
        "description": "What double-clicking the plot area does.",
        "valType": "enumerated"
      },
      "doubleClickDelay": {
        "min": 0,
        "dflt": 300,
        "description": "Maximum delay between two clicks of a double-click, in milliseconds.",
        "valType": "number"
      },
      "editable": {
        "dflt": false,
        "description": "Make titles, legend, annotations and shapes editable in place (E6.7).",
        "valType": "boolean"
      },
      "edits": {
        "description": "Fine-grained editability, overriding `editable` per element.",
        "role": "object",
        "annotationPosition": {
          "dflt": false,
          "description": "Drag annotations.",
          "valType": "boolean"
        },
        "annotationTail": {
          "dflt": false,
          "description": "Drag annotation arrow tails.",
          "valType": "boolean"
        },
        "annotationText": {
          "dflt": false,
          "description": "Edit annotation text.",
          "valType": "boolean"
        },
        "axisTitleText": {
          "dflt": false,
          "description": "Edit axis titles.",
          "valType": "boolean"
        },
        "colorbarPosition": {
          "dflt": false,
          "description": "Drag colorbars.",
          "valType": "boolean"
        },
        "colorbarTitleText": {
          "dflt": false,
          "description": "Edit colorbar titles.",
          "valType": "boolean"
        },
        "legendPosition": {
          "dflt": false,
          "description": "Drag the legend.",
          "valType": "boolean"
        },
        "legendText": {
          "dflt": false,
          "description": "Edit trace names in the legend.",
          "valType": "boolean"
        },
        "shapePosition": {
          "dflt": false,
          "description": "Drag and resize shapes.",
          "valType": "boolean"
        },
        "titleText": {
          "dflt": false,
          "description": "Edit the figure title.",
          "valType": "boolean"
        }
      },
      "locale": {
        "dflt": "en-US",
        "noBlank": true,
        "description": "Locale of UI strings and number and date formats, e.g. `'de'` or `'de-CH'` (which falls back to `de`, then English). Locales come from `locales` or `register()` (`@mk7s/holochart-locales` ships plotly.js's).",
        "valType": "string"
      },
      "locales": {
        "dflt": {},
        "description": "Locales for this chart only, by name: `{ de: { dictionary, format } }`, in plotly.js's locale shape. Looked up before registered ones.",
        "valType": "any"
      },
      "ariaLabel": {
        "dflt": "",
        "description": "The chart's accessible name (`aria-label`), read by screen readers. Empty: `layout.meta.description` when set, else the figure title followed by an automatic summary (\"Line chart with 3 traces\"). Holochart only (plan E17.1).",
        "valType": "string"
      },
      "a11y": {
        "description": "Accessibility options (plan E17). Holochart only.",
        "role": "object",
        "summaries": {
          "dflt": true,
          "description": "Add generated summaries of trends and extremes (\"Revenue rises from 1.2M in Jan to 3.4M in Dec\") to what screen readers get. Their code loads after the first draw. Holochart only (plan E17.2).",
          "valType": "boolean"
        },
        "dataTable": {
          "values": ["hidden", "visible", false],
          "dflt": "hidden",
          "description": "The traces' data tables: `'hidden'` for screen readers only (first 100 rows), `'visible'` shown below the chart with every row (virtualized), `false` none. Holochart only (plan E17.3).",
          "valType": "enumerated"
        },
        "patterns": {
          "dflt": false,
          "description": "Give bars, histograms, polar bars, filled areas (`fillpattern`) and pie slices a distinct pattern each, as an encoding redundant with color, unless the trace or template sets one. Holochart only (plan E17.5).",
          "valType": "boolean"
        },
        "reducedMotion": {
          "values": ["auto", true, false],
          "dflt": "auto",
          "description": "Snap transitions and drill-down tweens instead of animating them: `'auto'` when the user's system asks for reduced motion (the `prefers-reduced-motion` media query), `true` always, `false` never. Holochart only (plan E17.5).",
          "valType": "enumerated"
        },
        "keyboard": {
          "dflt": true,
          "description": "Keyboard access: Tab reaches the plot area (the arrows step through the data, `+` / `-` zoom) and the legend items. Holochart only (plan E6.5, E17.4).",
          "valType": "boolean"
        }
      },
      "toImageButtonOptions": {
        "description": "Options for the modebar \"download image\" button.",
        "role": "object",
        "format": {
          "values": ["png", "jpeg", "webp"],
          "dflt": "png",
          "description": "Image format.",
          "valType": "enumerated"
        },
        "filename": {
          "dflt": "newplot",
          "noBlank": true,
          "description": "File name.",
          "valType": "string"
        },
        "width": {
          "min": 1,
          "description": "Width in CSS pixels (defaults to the chart).",
          "valType": "number"
        },
        "height": {
          "min": 1,
          "description": "Height in CSS pixels (defaults to the chart).",
          "valType": "number"
        },
        "scale": {
          "min": 0,
          "dflt": 1,
          "description": "Resolution multiplier.",
          "valType": "number"
        }
      },
      "pixelRatio": {
        "min": 0.25,
        "max": 8,
        "extras": ["auto"],
        "dflt": "auto",
        "description": "Renderer pixel ratio. `auto` uses `window.devicePixelRatio`, up to `maxPixelRatio`.",
        "valType": "number"
      },
      "maxPixelRatio": {
        "min": 0.25,
        "max": 8,
        "dflt": 2,
        "description": "Upper limit of the pixel ratio that `pixelRatio: \"auto\"` takes from the display. Raise it for sharper output on 3× screens, at the cost of drawing more pixels.",
        "valType": "number"
      },
      "antialias": {
        "dflt": true,
        "description": "Request an antialiased WebGL context (fixed at context creation).",
        "valType": "boolean"
      },
      "powerPreference": {
        "values": ["default", "high-performance", "low-power"],
        "dflt": "default",
        "description": "WebGL context power preference hint.",
        "valType": "enumerated"
      },
      "sharedRenderer": {
        "values": ["auto", true, false],
        "dflt": "auto",
        "description": "Draw through one WebGL context shared by every chart on the page instead of a context per chart (browsers keep about 16, fewer on mobile). `auto` gives the first 4 charts a context of their own and shares for the rest. `false` always takes a context.",
        "valType": "enumerated"
      },
      "worker": {
        "values": [true, false, "auto"],
        "dflt": false,
        "description": "Run the calc stage in a Web Worker (ADR-011). `auto` switches on above a data-size threshold.",
        "valType": "enumerated"
      },
      "hoverRenderer": {
        "values": ["dom"],
        "dflt": "dom",
        "description": "How hover labels render. Only `dom` (positioned HTML over the canvas) exists in M1; a WebGL label renderer is planned (E5.7).",
        "valType": "enumerated"
      },
      "renderHover": {
        "description": "Custom hover label: `(points) => HTMLElement | null`. Return `null`/`undefined` to use the built-in label. Not serializable (ADR-012).",
        "valType": "function"
      },
      "textRenderer": {
        "values": ["webgl", "dom"],
        "dflt": "webgl",
        "description": "Render text as WebGL SDF glyphs or as a DOM overlay (ADR-005).",
        "valType": "enumerated"
      },
      "strict": {
        "dflt": false,
        "description": "Throw on the first validation error instead of warning (once per attribute path).",
        "valType": "boolean"
      },
      "debug": {
        "dflt": false,
        "description": "Log update plans and pipeline timings to the console.",
        "valType": "boolean"
      }
    }
  },
  "defs": {
    "valTypes": [
      "number",
      "integer",
      "string",
      "boolean",
      "enumerated",
      "flaglist",
      "color",
      "colorlist",
      "colorscale",
      "angle",
      "subplotid",
      "data_array",
      "info_array",
      "any",
      "function"
    ],
    "editTypes": [
      "calc",
      "calcIfAutorange",
      "crossTraceCalc",
      "layout",
      "ticks",
      "plot",
      "style",
      "colorbars",
      "legend",
      "modebar",
      "camera",
      "none"
    ]
  }
}
