Skip to content

Variable: funnelAttributes ​

ts
const funnelAttributes: ObjectNode<{
  alignmentgroup: Attr<string, {
     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.";
     dflt: "";
     editType: "calc";
  }>;
  cliponaxis: Attr<boolean, {
     description: "Clip labels to the plot area. `false` is not drawn yet: labels are always clipped to the subplot.";
     dflt: true;
     editType: "plot";
  }>;
  connector: ObjectNode<{
     fillcolor: Attr<string, {
        description: "Fill of the regions between stages. Default: `marker.color` at half its opacity (black at half opacity for per-bar colors).";
        editType: "style";
     }>;
     line: ObjectNode<{
        color: Attr<string, {
           description: `Color of the ${string}.`;
           dflt: "#444";
           editType: "style";
        }>;
        dash: Attr<string, {
           description: "Dash style: `'solid'`, `'dot'`, `'dash'`, `'longdash'`, `'dashdot'`, `'longdashdot'`, or a dash list such as `'5px,10px,2px'`.";
           dflt: "solid";
           editType: "style";
        }>;
        width: Attr<number, {
           description:   | `Width in CSS px of the ${string}.`
              | `Width in CSS px of the ${string} (0: not drawn).`;
           dflt: number;
           editType: "plot";
           min: 0;
        }>;
     }>;
     visible: Attr<boolean, {
        description: "Draw the connector regions and lines.";
        dflt: true;
        editType: "plot";
     }>;
  }>;
  constraintext: Attr<"none" | "inside" | "outside" | "both", {
     description: "Shrink labels (inside, outside, or both) so they are no larger than their bar.";
     dflt: "both";
     editType: "calc";
     values: readonly ["inside", "outside", "both", "none"];
  }>;
  dx: Attr<number, {
     description:   | "Step between implicit x coordinates (see `x0`)."
        | "Step between implicit x coordinates (see `y0`)."
        | "Step between implicit y coordinates (see `x0`)."
        | "Step between implicit y coordinates (see `y0`).";
     dflt: 1;
     editType: "calc";
  }>;
  dy: Attr<number, {
     description:   | "Step between implicit x coordinates (see `x0`)."
        | "Step between implicit x coordinates (see `y0`)."
        | "Step between implicit y coordinates (see `x0`)."
        | "Step between implicit y coordinates (see `y0`).";
     dflt: 1;
     editType: "calc";
  }>;
  hoverinfo: Attr<
     | "name"
     | "x"
     | "y"
     | "text"
     | "percent initial"
     | "percent previous"
     | "percent total"
     | `name+${string}`
     | `x+${string}`
     | `y+${string}`
     | `text+${string}`
     | `percent initial+${string}`
     | `percent previous+${string}`
     | `percent total+${string}`
     | "all"
     | "none"
     | "skip"
     | readonly (
     | "name"
     | "x"
     | "y"
     | "text"
     | "percent initial"
     | "percent previous"
     | "percent total"
     | `name+${string}`
     | `x+${string}`
     | `y+${string}`
     | `text+${string}`
     | `percent initial+${string}`
     | `percent previous+${string}`
     | `percent total+${string}`
     | "all"
     | "none"
     | "skip")[], {
     arrayOk: true;
     description: `Which fields hover labels show: the position and value (`x`, `y`), `text`, ${string} and the trace `name`; `'skip'` also turns hover events off for this trace. Default `'all'`.`;
     editType: "none";
     extras: readonly ["all", "none", "skip"];
     flags: readonly ["name", "x", "y", "text", "percent initial", "percent previous", "percent total"];
  }>;
  insidetextanchor: {
     ~full?: ["start" | "middle" | "end"];
     ~in?: ["start" | "middle" | "end"];
     accepts?: (value) => boolean;
     animatable?: boolean;
     arrayOk?: boolean;
     clamp?: boolean;
     deprecated?: string;
     description?: string;
     dflt: "middle";
     editType?: EditType;
     examples?: readonly unknown[];
     extras?: readonly PrimitiveValue[];
     flags?: readonly string[];
     freeLength?: boolean;
     items?:   | AttrSpec<unknown, unknown>
        | readonly AttrSpec<unknown, unknown>[];
     kind: "attr";
     max?: number;
     min?: number;
     noBlank?: boolean;
     plotlyPath?: string;
     role?: AttrRole;
     since?: string;
     strict?: boolean;
     valType:   | "string"
        | "number"
        | "boolean"
        | "function"
        | "integer"
        | "enumerated"
        | "flaglist"
        | "color"
        | "colorlist"
        | "colorscale"
        | "angle"
        | "subplotid"
        | "data_array"
        | "info_array"
        | "any";
     values?: readonly PrimitiveValue[];
  };
  insidetextfont: ObjectNode<{
     color: Attr<string | readonly string[], {
        arrayOk: true;
        description: "Text color, or one per bar.";
        editType: "style";
     }>;
     family: Attr<string, {
        description: "CSS font-family list.";
        editType: "calc";
        noBlank: true;
        strict: true;
     }>;
     size: Attr<
        | number
        | TypedArray
        | readonly number[], {
        arrayOk: true;
        description: "Font size in CSS px, or one per bar.";
        editType: "calc";
        min: 1;
     }>;
     style: Attr<"normal" | "italic", {
        description: "Font style.";
        editType: "calc";
        values: readonly ["normal", "italic"];
     }>;
     weight: Attr<number | "normal" | "bold", {
        description: "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.";
        editType: "calc";
        extras: readonly ["normal", "bold"];
        max: 1000;
        min: 1;
     }>;
  }>;
  marker: ObjectNode<Omit<{
     autocolorscale: AttrSpec<boolean, boolean | undefined>;
     cauto: AttrSpec<boolean, boolean | undefined>;
     cmax: AttrSpec<number, number | undefined>;
     cmid: AttrSpec<number, number | undefined>;
     cmin: AttrSpec<number, number | undefined>;
     color: Attr<string | readonly string[], {
        animatable: true;
        arrayOk: true;
        description: "Bar fill color, one per bar, or numbers mapped through `colorscale`. Defaults to the colorway.";
        editType: "style";
     }>;
     coloraxis: AttrSpec<string, string | undefined>;
     colorbar: ObjectNode<{
        bgcolor: Attr<string, {
           description: "Background of the box.";
           dflt: "rgba(0,0,0,0)";
        }>;
        bordercolor: Attr<string, {
           description: "Border color of the colorbar box.";
           dflt: "#444";
        }>;
        borderwidth: Attr<number, {
           description: "Border width of the box, px.";
           dflt: 0;
           min: 0;
        }>;
        dtick: AttrSpec<unknown, unknown>;
        exponentformat: Attr<"none" | "e" | "E" | "power" | "SI" | "B", {
           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⁹).";
           dflt: "B";
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
           values: readonly ["none", "e", "E", "power", "SI", "B"];
        }>;
        len: Attr<number, {
           description: "Length of the colorbar along its axis, padding included (`ypad` / `xpad`).";
           dflt: 1;
           min: 0;
        }>;
        lenmode: Attr<"fraction" | "pixels", {
           description: "Unit of `len`: px, or a fraction of the plot height (`v`) / width (`h`).";
           dflt: "fraction";
           values: readonly ["fraction", "pixels"];
        }>;
        minexponent: Attr<number, {
           description: "Smallest decimal exponent written in exponent form (`SI`/`B` and exponent formats); smaller magnitudes are written out in full.";
           dflt: 3;
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
           min: 0;
        }>;
        nticks: Attr<number, {
           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.";
           dflt: 0;
           editType: "ticks";
           min: 0;
        }>;
        orientation: Attr<"v" | "h", {
           description: "Vertical bar (`v`, beside the plot) or horizontal bar (`h`, above or below).";
           dflt: "v";
           values: readonly ["h", "v"];
        }>;
        outlinecolor: Attr<string, {
           description: "Color of the outline around the bar.";
           dflt: "#444";
        }>;
        outlinewidth: Attr<number, {
           description: "Outline width, px.";
           dflt: 1;
           min: 0;
        }>;
        separatethousands: Attr<boolean, {
           description: "Always separate thousands (1,000). By default only numbers with 5 or more integer digits are separated.";
           dflt: false;
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
        }>;
        showexponent: Attr<"all" | "none" | "first" | "last", {
           description: "Which tick labels show the exponent.";
           dflt: "all";
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
           values: readonly ["all", "first", "last", "none"];
        }>;
        showticklabels: Attr<boolean, {
           description: "Show tick labels.";
           dflt: true;
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
        }>;
        showtickprefix: Attr<"all" | "none" | "first" | "last", {
           description: "Which tick labels get `tickprefix`.";
           dflt: "all";
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
           values: readonly ["all", "first", "last", "none"];
        }>;
        showticksuffix: Attr<"all" | "none" | "first" | "last", {
           description: "Which tick labels get `ticksuffix`.";
           dflt: "all";
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
           values: readonly ["all", "first", "last", "none"];
        }>;
        thickness: Attr<number, {
           description: "Thickness of the color bar.";
           dflt: 30;
           min: 0;
        }>;
        thicknessmode: Attr<"fraction" | "pixels", {
           description: "Unit of `thickness`: px, or a fraction of the plot width (`v`) / height (`h`).";
           dflt: "pixels";
           values: readonly ["fraction", "pixels"];
        }>;
        tick0: AttrSpec<unknown, unknown>;
        tickangle: Attr<number | "auto", {
           description: "Tick-label rotation in degrees. `auto` rotates x-axis labels by the first `autotickangles` entry that avoids overlap.";
           dflt: "auto";
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
           extras: readonly ["auto"];
        }>;
        tickcolor: Attr<string, {
           description: "Tick color. Defaults to `color`.";
           editType: "ticks";
        }>;
        tickfont: ObjectNode<{
           color: Attr<string, {
              description: ...;
              editType: ...;
           }>;
           family: Attr<string, {
              description: ...;
              noBlank: ...;
              strict: ...;
           }>;
           lineposition: Attr<... | ... | ... | ... | ... | ... | ..., {
              description: ...;
              extras: ...;
              flags: ...;
           }>;
           shadow: Attr<string, {
              description: ...;
           }>;
           size: Attr<number, {
              description: ...;
              min: ...;
           }>;
           style: Attr<... | ..., {
              description: ...;
              values: ...;
           }>;
           textcase: Attr<... | ... | ... | ..., {
              description: ...;
              values: ...;
           }>;
           variant: Attr<... | ... | ... | ... | ... | ..., {
              description: ...;
              values: ...;
           }>;
           weight: Attr<... | ... | ..., {
              description: ...;
              extras: ...;
              max: ...;
              min: ...;
           }>;
        }>;
        tickformat: Attr<string, {
           description: "Tick-label format: a d3-format specifier for numbers (`.2f`, `~s`, `$,`) or a 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.";
           dflt: "";
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
        }>;
        ticklabeloverflow: Attr<"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`.";
           values: readonly ["allow", "hide past div", "hide past domain"];
        }>;
        ticklabelposition: Attr<
           | "inside"
           | "outside"
           | "outside top"
           | "inside top"
           | "outside left"
           | "inside left"
           | "outside right"
           | "inside right"
           | "outside bottom"
           | "inside bottom", {
           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.";
           dflt: "outside";
           values: readonly ["outside", "inside", "outside top", "inside top", "outside bottom", "inside bottom", "outside left", "inside left", "outside right", "inside right"];
        }>;
        ticklabelstep: Attr<number, {
           description: "Label every n-th tick only (`tickmode` `auto` and `linear`).";
           dflt: 1;
           editType: "ticks";
           min: 1;
        }>;
        ticklen: Attr<number, {
           description: "Tick length in px.";
           dflt: 5;
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
           min: 0;
        }>;
        tickmode: Attr<"auto" | "linear" | "array" | "sync", {
           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`.";
           editType: "ticks";
           values: readonly ["auto", "linear", "array", "sync"];
        }>;
        tickprefix: Attr<string, {
           description: "Text before each tick label.";
           dflt: "";
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
        }>;
        ticks: Attr<"" | "inside" | "outside", {
           description: "Draw tick marks outside or inside the plot area, or not at all (`''`).";
           dflt: "";
           editType: EditType;
           values: readonly ["outside", "inside", ""];
        }>;
        ticksuffix: Attr<string, {
           description: "Text after each tick label.";
           dflt: "";
           editType: readonly (... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...)[];
        }>;
        ticktext: AttrSpec<DataArray, DataArray | undefined>;
        tickvals: AttrSpec<DataArray, DataArray | undefined>;
        tickwidth: Attr<number, {
           description: "Tick width in px.";
           dflt: 1;
           editType: "ticks";
           min: 0;
        }>;
        title: ObjectNode<{
           font: ObjectNode<{
              color: ...;
              family: ...;
              lineposition: ...;
              shadow: ...;
              size: ...;
              style: ...;
              textcase: ...;
              variant: ...;
              weight: ...;
           }>;
           side: Attr<... | ... | ..., {
              description: ...;
              values: ...;
           }>;
           text: Attr<string, {
              description: ...;
              dflt: ...;
           }>;
        }>;
        x: Attr<number, {
           description: "Horizontal position (`xref` fraction). Defaults to 1.02 (`v`, paper), 1 (`v`, container) or 0.5 (`h`).";
        }>;
        xanchor: Attr<"left" | "right" | "center", {
           description: "Which side of the colorbar sits at `x`. Defaults to `left` (`v`, paper), `right` (`v`, container) or `center` (`h`).";
           values: readonly ["left", "center", "right"];
        }>;
        xpad: Attr<number, {
           description: "Horizontal padding, px.";
           dflt: 10;
           min: 0;
        }>;
        xref: Attr<"container" | "paper", {
           description: "Reference of `x`: the plot area (`paper`) or the whole figure.";
           dflt: "paper";
           values: readonly ["container", "paper"];
        }>;
        y: Attr<number, {
           description: "Vertical position (`yref` fraction). Defaults to 0.5 (`v`), 1.02 (`h`, paper) or 1 (`h`, container).";
        }>;
        yanchor: Attr<"middle" | "top" | "bottom", {
           description: "Which side of the colorbar sits at `y`. Defaults to `middle` (`v`), `bottom` (`h`, paper) or `top` (`h`, container).";
           values: readonly ["top", "middle", "bottom"];
        }>;
        ypad: Attr<number, {
           description: "Vertical padding, px.";
           dflt: 10;
           min: 0;
        }>;
        yref: Attr<"container" | "paper", {
           description: "Reference of `y`: the plot area (`paper`) or the whole figure.";
           dflt: "paper";
           values: readonly ["container", "paper"];
        }>;
     }>;
     colorscale: AttrSpec<ColorScale, ColorScale | undefined>;
     line: ObjectNode<{
        autocolorscale: AttrSpec<boolean, boolean | undefined>;
        cauto: AttrSpec<boolean, boolean | undefined>;
        cmax: AttrSpec<number, number | undefined>;
        cmid: AttrSpec<number, number | undefined>;
        cmin: AttrSpec<number, number | undefined>;
        color: Attr<string | readonly string[], {
           arrayOk: true;
           description: "Bar outline color, one per bar, or numbers mapped through its `colorscale`.";
           editType: "style";
        }>;
        coloraxis: AttrSpec<string, string | undefined>;
        colorscale: AttrSpec<ColorScale, ColorScale | undefined>;
        reversescale: AttrSpec<boolean, boolean>;
        width: Attr<
           | number
           | TypedArray
           | readonly number[], {
           arrayOk: true;
           description: "Bar outline width in CSS px (centered on the edge), or one per bar.";
           dflt: 0;
           editType: "style";
           min: 0;
        }>;
     }>;
     opacity: Attr<
        | number
        | TypedArray
        | readonly number[], {
        animatable: true;
        arrayOk: true;
        description: "Bar opacity (multiplied by the trace `opacity`), or one per bar.";
        dflt: 1;
        editType: "style";
        max: 1;
        min: 0;
     }>;
     pattern: ObjectNode<{
        bgcolor: Attr<string, {
           arrayOk: boolean;
           description: `Pattern background. Default: the fill color with `fillmode: 'overlay'`, else transparent${string}.`;
           editType: "style";
        }>;
        fgcolor: Attr<string, {
           arrayOk: boolean;
           description: `Pattern color. Default: the fill color with `fillmode: 'replace'`, else white or dark grey, whichever contrasts with `bgcolor`${string}.`;
           editType: "style";
        }>;
        fgopacity: Attr<number, {
           description: "Opacity of the pattern color. Default 0.5 with `fillmode: 'overlay'`, else 1.";
           editType: "style";
           max: 1;
           min: 0;
        }>;
        fillmode: Attr<"replace" | "overlay", {
           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.";
           dflt: "replace";
           editType: "style";
           values: readonly ["replace", "overlay"];
        }>;
        shape: Attr<"" | "x" | "/" | "\" | "-" | "|" | "+" | ".", {
           arrayOk: boolean;
           description: `Hatch shape: diagonal (`'/'`, `'\'`, `'x'`), horizontal and vertical (`'-'`, `'|'`, `'+'`) lines or dots (`'.'`); `''` for none${string}.`;
           dflt: "";
           editType: "style";
           values: readonly ["", "/", "\", "x", "-", "|", "+", "."];
        }>;
        size: Attr<number, {
           arrayOk: boolean;
           description: `Size of the pattern's tiles in CSS px: the spacing of its lines or dots${string}.`;
           dflt: 8;
           editType: "style";
           min: 0;
        }>;
        solidity: Attr<number, {
           arrayOk: boolean;
           description: `Fraction of the area the pattern covers: 0 shows only the background, 1 only the pattern color${string}.`;
           dflt: 0.3;
           editType: "style";
           max: 1;
           min: 0;
        }>;
     }>;
     reversescale: AttrSpec<boolean, boolean>;
     showscale: AttrSpec<boolean, boolean>;
  }, "pattern">>;
  offset: Attr<number, {
     description: "Shift of the bars' leading edge from their position, in position-axis units. Default: centered in the (group) slot.";
     editType: "calc";
  }>;
  offsetgroup: Attr<string, {
     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.";
     dflt: "";
     editType: "calc";
  }>;
  orientation: Attr<"v" | "h", {
     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.";
     editType: "calc";
     values: readonly ["v", "h"];
  }>;
  outsidetextfont: ObjectNode<{
     color: Attr<string | readonly string[], {
        arrayOk: true;
        description: "Text color, or one per bar.";
        editType: "style";
     }>;
     family: Attr<string, {
        description: "CSS font-family list.";
        editType: "calc";
        noBlank: true;
        strict: true;
     }>;
     size: Attr<
        | number
        | TypedArray
        | readonly number[], {
        arrayOk: true;
        description: "Font size in CSS px, or one per bar.";
        editType: "calc";
        min: 1;
     }>;
     style: Attr<"normal" | "italic", {
        description: "Font style.";
        editType: "calc";
        values: readonly ["normal", "italic"];
     }>;
     weight: Attr<number | "normal" | "bold", {
        description: "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.";
        editType: "calc";
        extras: readonly ["normal", "bold"];
        max: 1000;
        min: 1;
     }>;
  }>;
  text: Attr<string | readonly string[], {
     arrayOk: true;
     description: "Text per bar, drawn per `textposition` and shown in hover labels.";
     dflt: "";
     editType: "calc";
  }>;
  textangle: {
     ~full?: [number | "auto"];
     ~in?: [number | "auto"];
     accepts?: (value) => boolean;
     animatable?: boolean;
     arrayOk?: boolean;
     clamp?: boolean;
     deprecated?: string;
     description?: string;
     dflt: 0;
     editType?: EditType;
     examples?: readonly unknown[];
     extras?: readonly PrimitiveValue[];
     flags?: readonly string[];
     freeLength?: boolean;
     items?:   | AttrSpec<unknown, unknown>
        | readonly AttrSpec<unknown, unknown>[];
     kind: "attr";
     max?: number;
     min?: number;
     noBlank?: boolean;
     plotlyPath?: string;
     role?: AttrRole;
     since?: string;
     strict?: boolean;
     valType:   | "string"
        | "number"
        | "boolean"
        | "function"
        | "integer"
        | "enumerated"
        | "flaglist"
        | "color"
        | "colorlist"
        | "colorscale"
        | "angle"
        | "subplotid"
        | "data_array"
        | "info_array"
        | "any";
     values?: readonly PrimitiveValue[];
  };
  textfont: ObjectNode<{
     color: Attr<string | readonly string[], {
        arrayOk: true;
        description: "Text color, or one per bar.";
        editType: "style";
     }>;
     family: Attr<string, {
        description: "CSS font-family list.";
        editType: "calc";
        noBlank: true;
        strict: true;
     }>;
     size: Attr<
        | number
        | TypedArray
        | readonly number[], {
        arrayOk: true;
        description: "Font size in CSS px, or one per bar.";
        editType: "calc";
        min: 1;
     }>;
     style: Attr<"normal" | "italic", {
        description: "Font style.";
        editType: "calc";
        values: readonly ["normal", "italic"];
     }>;
     weight: Attr<number | "normal" | "bold", {
        description: "Font weight: a CSS numeric weight (1–1000), `normal` or `bold`.";
        editType: "calc";
        extras: readonly ["normal", "bold"];
        max: 1000;
        min: 1;
     }>;
  }>;
  textinfo: Attr<
     | "text"
     | "percent initial"
     | "percent previous"
     | "percent total"
     | `text+${string}`
     | `percent initial+${string}`
     | `percent previous+${string}`
     | `percent total+${string}`
     | "none"
     | "label"
     | "value"
     | `label+${string}`
     | `value+${string}`, {
     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.";
     editType: "plot";
     extras: readonly ["none"];
     flags: readonly ["label", "text", "percent initial", "percent previous", "percent total", "value"];
  }>;
  textposition: Attr<
     | "auto"
     | "none"
     | "inside"
     | "outside"
     | readonly ("auto" | "none" | "inside" | "outside")[], {
     arrayOk: true;
     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`.";
     dflt: "auto";
     editType: "calc";
     values: readonly ["inside", "outside", "auto", "none"];
  }>;
  texttemplate: Attr<string | readonly string[], {
     arrayOk: true;
     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%}`).";
     dflt: "";
     editType: "plot";
  }>;
  width: Attr<number, {
     description: "Bar width in position-axis units. Default: the slot left by `layout.funnelgap` and the funnel mode.";
     editType: "calc";
     min: 0;
  }>;
  x: AttrSpec<DataArray, DataArray | undefined>;
  x0: AttrSpec<unknown, unknown>;
  xperiod: AttrSpec<unknown, unknown>;
  xperiod0: AttrSpec<unknown, unknown>;
  xperiodalignment: Attr<"start" | "middle" | "end", {
     description:   | "Where points sit within their `xperiod`."
        | "Where points sit within their `yperiod`.";
     dflt: "middle";
     editType: "calc";
     values: readonly ["start", "middle", "end"];
  }>;
  y: AttrSpec<DataArray, DataArray | undefined>;
  y0: AttrSpec<unknown, unknown>;
  yperiod: AttrSpec<unknown, unknown>;
  yperiod0: AttrSpec<unknown, unknown>;
  yperiodalignment: Attr<"start" | "middle" | "end", {
     description:   | "Where points sit within their `xperiod`."
        | "Where points sit within their `yperiod`.";
     dflt: "middle";
     editType: "calc";
     values: readonly ["start", "middle", "end"];
  }>;
  zorder: Attr<number, {
     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.";
     dflt: 0;
     editType: "plot";
  }>;
}>;

Experimental

The funnel schema. Common trace attributes (name, opacity, xaxis, …) come from core.

Released under the MIT License.