{
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "$id": "https://westcoastcharts.dev/schema/1.1.5/wcc-options.schema.json",
 "title": "West Coast Charts options",
 "description": "The options object of new WestCoastCharts(el, options), generated from types/*.d.ts. Functions are marked \"x-wcc-type\": \"function\" (not expressible in JSON). Premium chart types and their plotOptions need west-coast-charts/premium (\"x-wcc-license\": \"premium\").",
 "x-wcc-version": "1.1.5",
 "type": "object",
 "properties": {
  "annotations": {
   "$ref": "#/$defs/ApexAnnotations",
   "description": "Lines, ranges, points, texts and images drawn on top of the plot at data coordinates."
  },
  "chart": {
   "type": "object",
   "properties": {
    "licenseKey": {
     "type": "string",
     "description": "West Coast Charts premium: licence key of this chart (overrides WestCoastCharts.setLicenseKey)"
    },
    "readability": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "none",
        "halo",
        "pill",
        "auto",
        "hide"
       ]
      },
      {
       "type": "boolean"
      },
      {
       "type": "object",
       "properties": {
        "mode": {
         "type": "string",
         "enum": [
          "none",
          "halo",
          "pill",
          "auto",
          "hide"
         ],
         "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
        },
        "fallback": {
         "type": "string",
         "enum": [
          "halo",
          "pill",
          "hide"
         ],
         "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
        },
        "enabled": {
         "type": "boolean",
         "description": "false switches the treatment off for this label kind"
        },
        "contrast": {
         "type": "boolean",
         "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
        },
        "minRatio": {
         "type": "number",
         "description": "WCAG 2 contrast ratio to reach. Default 4.5"
        },
        "light": {
         "type": "string",
         "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
        },
        "dark": {
         "type": "string",
         "description": "Dark colour of the pair. Default: `'#111827'`.",
         "default": "#111827"
        },
        "background": {
         "type": "string",
         "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
        },
        "halo": {
         "type": "object",
         "properties": {
          "width": {
           "type": "number",
           "description": "Outline width in pixels. Default: `3`.",
           "default": 3
          },
          "color": {
           "type": "string",
           "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
           "default": "auto"
          },
          "opacity": {
           "type": "number",
           "description": "Outline opacity (0 to 1). Default: `0.92`.",
           "default": 0.92
          },
          "blur": {
           "type": "number",
           "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
           "default": 0
          }
         },
         "additionalProperties": false,
         "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
        },
        "pill": {
         "type": "object",
         "properties": {
          "fill": {
           "type": "string",
           "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
           "default": "auto"
          },
          "opacity": {
           "type": "number",
           "description": "Box opacity (0 to 1). Default: `0.9`.",
           "default": 0.9
          },
          "radius": {
           "type": "number",
           "description": "Corner radius in pixels. Default: `4`.",
           "default": 4
          },
          "padding": {
           "anyOf": [
            {
             "type": "number"
            },
            {
             "type": "array",
             "prefixItems": [
              {
               "type": "number"
              },
              {
               "type": "number"
              }
             ],
             "minItems": 2,
             "maxItems": 2
            }
           ],
           "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
           "default": [
            1,
            4
           ]
          },
          "stroke": {
           "type": "string",
           "description": "Outline colour of the box. Default: `'none'`.",
           "default": "none"
          },
          "strokeWidth": {
           "type": "number",
           "description": "Outline width in pixels. Default: `1`.",
           "default": 1
          },
          "offset": {
           "type": "array",
           "prefixItems": [
            {
             "type": "number"
            },
            {
             "type": "number"
            }
           ],
           "minItems": 2,
           "maxItems": 2,
           "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
           "default": [
            0,
            0
           ]
          }
         },
         "additionalProperties": false,
         "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
        },
        "shadow": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "object",
           "properties": {
            "dx": {
             "type": "number",
             "description": "Horizontal shadow offset in pixels. Default: `0`.",
             "default": 0
            },
            "dy": {
             "type": "number",
             "description": "Vertical shadow offset in pixels. Default: `1`.",
             "default": 1
            },
            "blur": {
             "type": "number",
             "description": "Shadow blur in pixels. Default: `2`.",
             "default": 2
            },
            "color": {
             "type": "string",
             "description": "Shadow colour. Default: `'#000000'`.",
             "default": "#000000"
            },
            "opacity": {
             "type": "number",
             "description": "Shadow opacity (0 to 1). Default: `0.35`.",
             "default": 0.35
            }
           },
           "additionalProperties": false
          }
         ],
         "description": "drop shadow on the pill (on the text in halo mode)"
        },
        "raise": {
         "type": "boolean",
         "description": "axis labels sitting on marks are moved above the series (default true)"
        },
        "each": {
         "x-wcc-type": "function",
         "description": "per label: return an override (or 'none') for this one label; called only when set"
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "West Coast Charts: default readability of every label kind (dataLabels, axis labels, premium scales)"
    },
    "accessibility": {
     "$ref": "#/$defs/WccChartAccessibility",
     "description": "West Coast Charts: WCAG 2.2 AA features (all on by default)"
    },
    "width": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Chart width: a number is pixels, a string is any CSS length such as a percentage of the\ncontainer. Default: `'100%'`.",
     "default": "100%"
    },
    "height": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Chart height: a number is pixels, a percentage is relative to the container's height; 'auto'\nuses the width divided by 1.61 for axis charts and by 1.2 for the others. Default: `'auto'`.",
     "default": "auto"
    },
    "type": {
     "type": "string",
     "enum": [
      "line",
      "area",
      "bar",
      "pie",
      "donut",
      "radialBar",
      "scatter",
      "bubble",
      "heatmap",
      "candlestick",
      "boxPlot",
      "radar",
      "polarArea",
      "rangeBar",
      "rangeArea",
      "treemap",
      "gauge",
      "funnel",
      "pyramid",
      "waterfall",
      "dumbbell",
      "beeswarm",
      "histogram",
      "violin",
      "raincloud",
      "sunburst",
      "icicle",
      "streamgraph",
      "unit",
      "waffle",
      "slope",
      "barRace",
      "calendar",
      "sankey",
      "chord",
      "gantt",
      "tree",
      "stock",
      "map",
      "marimekko",
      "network",
      "radialColumn",
      "quintTimeline",
      "quintConvergence",
      "vitalsClock",
      "schedule"
     ],
     "description": "The chart type. The West Coast Charts types (gauge ... calendar) need 'west-coast-charts/types'\n(included in 'west-coast-charts/full'), the premium types (sankey ... radialColumn) need\n'west-coast-charts/premium'."
    },
    "foreColor": {
     "type": "string",
     "description": "Text colour used for axis labels, titles and legend text unless their own colour option is set.\nDefault: `'#373d3f'`.",
     "default": "#373d3f"
    },
    "fontFamily": {
     "type": "string",
     "description": "Font family applied to all chart text that has no own fontFamily. Default: `'Helvetica, Arial,\nsans-serif'`.",
     "x-wcc-default": "'Helvetica, Arial,\nsans-serif'"
    },
    "background": {
     "type": "string",
     "description": "Background colour of the chart area; an empty string leaves it transparent. Default: `''`.",
     "default": ""
    },
    "offsetX": {
     "type": "number",
     "description": "Moves the whole drawing horizontally by this many pixels. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Moves the whole drawing vertically by this many pixels. Default: `0`.",
     "default": 0
    },
    "dropShadow": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Draws the shadow. Default: `false`.",
       "default": false
      },
      "top": {
       "type": "number",
       "description": "Vertical shadow distance in pixels. Default: `2`.",
       "default": 2
      },
      "left": {
       "type": "number",
       "description": "Horizontal shadow distance in pixels. Default: `2`.",
       "default": 2
      },
      "blur": {
       "type": "number",
       "description": "Blur radius in pixels. Default: `4`.",
       "default": 4
      },
      "opacity": {
       "type": "number",
       "description": "Shadow opacity (0 to 1). Default: `0.7`.",
       "default": 0.7
      },
      "color": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "object",
         "properties": {
          "toString": {
           "x-wcc-type": "function",
           "description": "Returns a string representation of a string.\nReturns a string representation of an array."
          },
          "charAt": {
           "x-wcc-type": "function",
           "description": "Returns the character at the specified index."
          },
          "charCodeAt": {
           "x-wcc-type": "function",
           "description": "Returns the Unicode value of the character at the specified location."
          },
          "concat": {
           "x-wcc-type": "function",
           "description": "Returns a string that contains the concatenation of two or more strings.\nCombines two or more arrays.\nThis method returns a new array without modifying any existing arrays."
          },
          "indexOf": {
           "x-wcc-type": "function",
           "description": "Returns the position of the first occurrence of a substring.\nReturns the index of the first occurrence of a value in an array, or -1 if it is not present."
          },
          "lastIndexOf": {
           "x-wcc-type": "function",
           "description": "Returns the last occurrence of a substring in the string.\nReturns the index of the last occurrence of a specified value in an array, or -1 if it is not present."
          },
          "localeCompare": {
           "x-wcc-type": "function",
           "description": "Determines whether two strings are equivalent in the current locale.\nDetermines whether two strings are equivalent in the current or specified locale."
          },
          "match": {
           "x-wcc-type": "function",
           "description": "Matches a string with a regular expression, and returns an array containing the results of that search.\nMatches a string or an object that supports being matched against, and returns an array\ncontaining the results of that search, or null if no matches are found."
          },
          "replace": {
           "x-wcc-type": "function",
           "description": "Replaces text in a string, using a regular expression or search string.\nPasses a string and {@linkcode replaceValue} to the `[Symbol.replace]` method on {@linkcode searchValue}. This method is expected to implement its own replacement algorithm.\nReplaces text in a string, using an object that supports replacement within a string."
          },
          "search": {
           "x-wcc-type": "function",
           "description": "Finds the first substring match in a regular expression search."
          },
          "slice": {
           "x-wcc-type": "function",
           "description": "Returns a section of a string.\nReturns a copy of a section of an array.\nFor both start and end, a negative index can be used to indicate an offset from the end of the array.\nFor example, -2 refers to the second to last element of the array."
          },
          "split": {
           "x-wcc-type": "function",
           "description": "Split a string into substrings using the specified separator and return them as an array."
          },
          "substring": {
           "x-wcc-type": "function",
           "description": "Returns the substring at the specified location within a String object."
          },
          "toLowerCase": {
           "x-wcc-type": "function",
           "description": "Converts all the alphabetic characters in a string to lowercase."
          },
          "toLocaleLowerCase": {
           "x-wcc-type": "function",
           "description": "Converts all alphabetic characters to lowercase, taking into account the host environment's current locale."
          },
          "toUpperCase": {
           "x-wcc-type": "function",
           "description": "Converts all the alphabetic characters in a string to uppercase."
          },
          "toLocaleUpperCase": {
           "x-wcc-type": "function",
           "description": "Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale."
          },
          "trim": {
           "x-wcc-type": "function",
           "description": "Removes the leading and trailing white space and line terminator characters from a string."
          },
          "length": {
           "type": "number",
           "description": "Returns the length of a String object.\nGets or sets the length of the array. This is a number one higher than the highest index in the array."
          },
          "substr": {
           "x-wcc-type": "function",
           "description": "Gets a substring beginning at the specified location and having the specified length.",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "valueOf": {
           "x-wcc-type": "function",
           "description": "Returns the primitive value of the specified object."
          },
          "codePointAt": {
           "x-wcc-type": "function",
           "description": "Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point\nvalue of the UTF-16 encoded code point starting at the string element at position pos in\nthe String resulting from converting this object to a String.\nIf there is no element at that position, the result is undefined.\nIf a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos."
          },
          "includes": {
           "x-wcc-type": "function",
           "description": "Returns true if searchString appears as a substring of the result of converting this\nobject to a String, at one or more positions that are\ngreater than or equal to position; otherwise, returns false.\nDetermines whether an array includes a certain element, returning true or false as appropriate."
          },
          "endsWith": {
           "x-wcc-type": "function",
           "description": "Returns true if the sequence of elements of searchString converted to a String is the\nsame as the corresponding elements of this object (converted to a String) starting at\nendPosition – length(this). Otherwise returns false."
          },
          "normalize": {
           "x-wcc-type": "function",
           "description": "Returns the String value result of normalizing the string into the normalization form\nnamed by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms."
          },
          "repeat": {
           "x-wcc-type": "function",
           "description": "Returns a String value that is made from count copies appended together. If count is 0,\nthe empty string is returned."
          },
          "startsWith": {
           "x-wcc-type": "function",
           "description": "Returns true if the sequence of elements of searchString converted to a String is the\nsame as the corresponding elements of this object (converted to a String) starting at\nposition. Otherwise returns false."
          },
          "anchor": {
           "x-wcc-type": "function",
           "description": "Returns an `<a>` HTML anchor element and sets the name attribute to the text value",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "big": {
           "x-wcc-type": "function",
           "description": "Returns a `<big>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "blink": {
           "x-wcc-type": "function",
           "description": "Returns a `<blink>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "bold": {
           "x-wcc-type": "function",
           "description": "Returns a `<b>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "fixed": {
           "x-wcc-type": "function",
           "description": "Returns a `<tt>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "fontcolor": {
           "x-wcc-type": "function",
           "description": "Returns a `<font>` HTML element and sets the color attribute value",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "fontsize": {
           "x-wcc-type": "function",
           "description": "Returns a `<font>` HTML element and sets the size attribute value",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "italics": {
           "x-wcc-type": "function",
           "description": "Returns an `<i>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "link": {
           "x-wcc-type": "function",
           "description": "Returns an `<a>` HTML element and sets the href attribute value",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "small": {
           "x-wcc-type": "function",
           "description": "Returns a `<small>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "strike": {
           "x-wcc-type": "function",
           "description": "Returns a `<strike>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "sub": {
           "x-wcc-type": "function",
           "description": "Returns a `<sub>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "sup": {
           "x-wcc-type": "function",
           "description": "Returns a `<sup>` HTML element",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility"
          },
          "padStart": {
           "x-wcc-type": "function",
           "description": "Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\nThe padding is applied from the start (left) of the current string."
          },
          "padEnd": {
           "x-wcc-type": "function",
           "description": "Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length.\nThe padding is applied from the end (right) of the current string."
          },
          "trimEnd": {
           "x-wcc-type": "function",
           "description": "Removes the trailing white space and line terminator characters from a string."
          },
          "trimStart": {
           "x-wcc-type": "function",
           "description": "Removes the leading white space and line terminator characters from a string."
          },
          "trimLeft": {
           "x-wcc-type": "function",
           "description": "Removes the leading white space and line terminator characters from a string.",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility. Use `trimStart` instead"
          },
          "trimRight": {
           "x-wcc-type": "function",
           "description": "Removes the trailing white space and line terminator characters from a string.",
           "deprecated": true,
           "x-wcc-deprecated": "A legacy feature for browser compatibility. Use `trimEnd` instead"
          },
          "matchAll": {
           "x-wcc-type": "function",
           "description": "Matches a string with a regular expression, and returns an iterable of matches\ncontaining the results of that search."
          },
          "__@iterator@227": {
           "x-wcc-type": "function",
           "description": "Iterator"
          },
          "toLocaleString": {
           "x-wcc-type": "function",
           "description": "Returns a date converted to a string using the current locale.\nReturns a string representation of an array. The elements are converted to string using their toLocaleString methods."
          },
          "pop": {
           "x-wcc-type": "function",
           "description": "Removes the last element from an array and returns it.\nIf the array is empty, undefined is returned and the array is not modified."
          },
          "push": {
           "x-wcc-type": "function",
           "description": "Appends new elements to the end of an array, and returns the new length of the array."
          },
          "join": {
           "x-wcc-type": "function",
           "description": "Adds all the elements of an array into a string, separated by the specified separator string."
          },
          "reverse": {
           "x-wcc-type": "function",
           "description": "Reverses the elements in an array in place.\nThis method mutates the array and returns a reference to the same array."
          },
          "shift": {
           "x-wcc-type": "function",
           "description": "Removes the first element from an array and returns it.\nIf the array is empty, undefined is returned and the array is not modified."
          },
          "sort": {
           "x-wcc-type": "function",
           "description": "Sorts an array in place.\nThis method mutates the array and returns a reference to the same array."
          },
          "splice": {
           "x-wcc-type": "function",
           "description": "Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements."
          },
          "unshift": {
           "x-wcc-type": "function",
           "description": "Inserts new elements at the start of an array, and returns the new length of the array."
          },
          "every": {
           "x-wcc-type": "function",
           "description": "Determines whether all the members of an array satisfy the specified test."
          },
          "some": {
           "x-wcc-type": "function",
           "description": "Determines whether the specified callback function returns true for any element of an array."
          },
          "forEach": {
           "x-wcc-type": "function",
           "description": "Performs the specified action for each element in an array."
          },
          "map": {
           "x-wcc-type": "function",
           "description": "Calls a defined callback function on each element of an array, and returns an array that contains the results."
          },
          "filter": {
           "x-wcc-type": "function",
           "description": "Returns the elements of an array that meet the condition specified in a callback function."
          },
          "reduce": {
           "x-wcc-type": "function",
           "description": "Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function."
          },
          "reduceRight": {
           "x-wcc-type": "function",
           "description": "Calls the specified callback function for all the elements in an array, in descending order. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function."
          },
          "find": {
           "x-wcc-type": "function",
           "description": "Returns the value of the first element in the array where predicate is true, and undefined\notherwise."
          },
          "findIndex": {
           "x-wcc-type": "function",
           "description": "Returns the index of the first element in the array where predicate is true, and -1\notherwise."
          },
          "fill": {
           "x-wcc-type": "function",
           "description": "Changes all array elements from `start` to `end` index to a static `value` and returns the modified array"
          },
          "copyWithin": {
           "x-wcc-type": "function",
           "description": "Returns the this object after copying a section of the array identified by start and end\nto the same array starting at position target"
          },
          "entries": {
           "x-wcc-type": "function",
           "description": "Returns an iterable of key, value pairs for every entry in the array"
          },
          "keys": {
           "x-wcc-type": "function",
           "description": "Returns an iterable of keys in the array"
          },
          "values": {
           "x-wcc-type": "function",
           "description": "Returns an iterable of values in the array"
          },
          "flatMap": {
           "x-wcc-type": "function",
           "description": "Calls a defined callback function on each element of an array. Then, flattens the result into\na new array.\nThis is identical to a map followed by flat with depth 1."
          },
          "flat": {
           "x-wcc-type": "function",
           "description": "Returns a new array with all sub-array elements concatenated into it recursively up to the\nspecified depth."
          },
          "__@unscopables@230": {
           "x-wcc-type": "__type",
           "description": "Is an object whose properties have the value 'true'\nwhen they will be absent when used in a 'with' statement."
          }
         },
         "required": [
          "toString",
          "concat",
          "indexOf",
          "lastIndexOf",
          "slice",
          "length",
          "valueOf",
          "includes",
          "__@iterator@227",
          "toLocaleString",
          "__@unscopables@230"
         ],
         "additionalProperties": {
          "type": "string"
         }
        }
       ],
       "description": "Shadow colour. Default: `'#000'`.\nShadow colour; an array gives one colour per series. Default: `'#000'`.",
       "default": "#000"
      },
      "enabledOnSeries": {
       "type": "array",
       "items": {
        "type": "number"
       },
       "description": "Indexes of the series that get the shadow; not set means all series."
      }
     },
     "additionalProperties": false,
     "description": "Shadow drawn behind series paths (lines, areas, bars)."
    },
    "nonce": {
     "type": "string",
     "description": "CSP nonce copied onto every `<style>` element the library adds (also in exported SVGs), so a\nstrict `style-src` policy accepts them."
    },
    "sanitizeHtml": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "West Coast Charts: how HTML returned by formatters / custom functions is\ninserted. true (default) = built-in sanitizer, function = custom sanitizer,\nfalse = raw innerHTML (ApexCharts 4.7.0 behaviour, trusted input only).\nPlain data strings (series names, categories, labels) are always text."
    },
    "eventSignature": {
     "type": "string",
     "enum": [
      "legacy",
      "standard"
     ],
     "description": "Premium/feature convention: legacy (default) retains family signatures; standard uses (eventOrNull, chart, payload). Core lifecycle callbacks are unchanged."
    },
    "events": {
     "type": "object",
     "properties": {
      "beatChange": {
       "x-wcc-type": "function"
      },
      "childrenLoad": {
       "x-wcc-type": "function"
      },
      "childrenLoadError": {
       "x-wcc-type": "function"
      },
      "crossFilter": {
       "x-wcc-type": "function"
      },
      "dataPointMouseEnter": {
       "x-wcc-type": "function",
       "description": "Called when the pointer enters a data point shape."
      },
      "dataPointMouseLeave": {
       "x-wcc-type": "function",
       "description": "Called when the pointer leaves a data point shape."
      },
      "dataPointSelection": {
       "x-wcc-type": "function",
       "description": "Called when a data point (bar, slice, marker) is clicked and becomes selected or unselected."
      },
      "dependencyCreate": {
       "x-wcc-type": "function"
      },
      "dependencyDelete": {
       "x-wcc-type": "function"
      },
      "drawingChange": {
       "x-wcc-type": "function"
      },
      "drillDownEnd": {
       "x-wcc-type": "function"
      },
      "drillDownError": {
       "x-wcc-type": "function"
      },
      "drillDownStart": {
       "x-wcc-type": "function"
      },
      "drillUp": {
       "x-wcc-type": "function"
      },
      "drilldown": {
       "x-wcc-type": "function"
      },
      "drilldownError": {
       "x-wcc-type": "function"
      },
      "drillup": {
       "x-wcc-type": "function"
      },
      "error": {
       "x-wcc-type": "function"
      },
      "filterChange": {
       "x-wcc-type": "function"
      },
      "groupToggle": {
       "x-wcc-type": "function"
      },
      "highlightFilterChanged": {
       "x-wcc-type": "function"
      },
      "historyChange": {
       "x-wcc-type": "function"
      },
      "layoutSettled": {
       "x-wcc-type": "function"
      },
      "legendClick": {
       "x-wcc-type": "function",
       "description": "Called when a legend entry is clicked, with the series index; runs before the default\nshow/hide toggle."
      },
      "nodeDragEnd": {
       "x-wcc-type": "function"
      },
      "nodeMove": {
       "x-wcc-type": "function"
      },
      "nodeToggle": {
       "x-wcc-type": "function"
      },
      "panelMounted": {
       "x-wcc-type": "function"
      },
      "panelPromoted": {
       "x-wcc-type": "function"
      },
      "panelRestored": {
       "x-wcc-type": "function"
      },
      "perspectiveApplied": {
       "x-wcc-type": "function"
      },
      "perspectiveCaptured": {
       "x-wcc-type": "function"
      },
      "playbackFrame": {
       "x-wcc-type": "function"
      },
      "quintLens": {
       "x-wcc-type": "function"
      },
      "quintPin": {
       "x-wcc-type": "function"
      },
      "quintSelect": {
       "x-wcc-type": "function"
      },
      "scheduleChange": {
       "x-wcc-type": "function"
      },
      "scheduleConflict": {
       "x-wcc-type": "function"
      },
      "scheduleSelect": {
       "x-wcc-type": "function"
      },
      "slotClick": {
       "x-wcc-type": "function"
      },
      "taskChange": {
       "x-wcc-type": "function"
      },
      "taskCreate": {
       "x-wcc-type": "function"
      },
      "taskDelete": {
       "x-wcc-type": "function"
      },
      "trellisMounted": {
       "x-wcc-type": "function"
      },
      "wccDrillPathChange": {
       "x-wcc-type": "function"
      },
      "wccFrameChange": {
       "x-wcc-type": "function"
      },
      "wccHistoryChange": {
       "x-wcc-type": "function"
      },
      "wccNarrativeState": {
       "x-wcc-type": "function"
      },
      "wccOrientChange": {
       "x-wcc-type": "function"
      },
      "zoomed": {
       "x-wcc-type": "function",
       "description": "Called after a zoom (selection zoom, zoom buttons, wheel or reset), with the new x and y\nranges."
      },
      "animationEnd": {
       "x-wcc-type": "function",
       "description": "Called once the initial (or update) animation of the series has finished."
      },
      "beforeMount": {
       "x-wcc-type": "function",
       "description": "Called after the options are processed and before the SVG is put into the page."
      },
      "mounted": {
       "x-wcc-type": "function",
       "description": "Called after the first render is in the page."
      },
      "updated": {
       "x-wcc-type": "function",
       "description": "Called after each re-render caused by updateOptions, updateSeries, appendData, a resize and\nsimilar."
      },
      "mouseMove": {
       "x-wcc-type": "function",
       "description": "Called on mouse movement over the plot area with the pointer event and the hovered series and\ndata indexes."
      },
      "mouseLeave": {
       "x-wcc-type": "function",
       "description": "Called when the pointer leaves the plot area."
      },
      "click": {
       "x-wcc-type": "function",
       "description": "Called on a click anywhere in the chart, with the hovered series and data indexes when there\nis one."
      },
      "xAxisLabelClick": {
       "x-wcc-type": "function",
       "description": "Called when an x-axis label is clicked, with the label index."
      },
      "markerClick": {
       "x-wcc-type": "function",
       "description": "Called when a point marker is clicked, with the series and data indexes."
      },
      "selection": {
       "x-wcc-type": "function",
       "description": "Called while a selection range is drawn or moved, with the selected x (and y) range."
      },
      "beforeZoom": {
       "x-wcc-type": "function",
       "description": "Called before a zoom is applied, with the new x range; return `{ xaxis: { min, max } }` to\nchange the range that is used."
      },
      "beforeResetZoom": {
       "x-wcc-type": "function",
       "description": "Called before the zoom is reset; return `{ xaxis: { min, max } }` to reset to a different\nrange."
      },
      "scrolled": {
       "x-wcc-type": "function",
       "description": "Called while the chart is panned, with the new x range."
      },
      "brushScrolled": {
       "x-wcc-type": "function",
       "description": "Called on a brush chart when its selection moves the target chart, with the new range."
      },
      "keyDown": {
       "x-wcc-type": "function",
       "description": "West Coast Charts: key pressed / released while the chart has focus"
      },
      "keyUp": {
       "x-wcc-type": "function",
       "description": "Called on keyup while the chart has keyboard focus, with the keyboard event."
      }
     },
     "additionalProperties": false,
     "description": "Lifecycle/core callbacks plus premium/feature events. Named precise handler types are in premium-events.d.ts; inline callbacks remain permissive for compatibility."
    },
    "brush": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Enables the brush behaviour. When `chart.events.selection` is your own function, the targets are not wired up automatically. Default: `false`.",
       "default": false
      },
      "autoScaleYaxis": {
       "type": "boolean",
       "description": "Rescales the target chart's y axis to the data inside the brushed range. Default: `true`.",
       "default": true
      },
      "target": {
       "type": "string",
       "description": "`chart.id` of the single chart this brush controls."
      },
      "targets": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "`chart.id`s of several charts this brush controls; used instead of `target`."
      }
     },
     "additionalProperties": false,
     "description": "Turns this chart into a navigator for other charts: its selection sets their x range."
    },
    "id": {
     "type": "string",
     "description": "Name of the chart, used by `ApexCharts.exec`, brush targets and as the default download file\nname."
    },
    "group": {
     "type": "string",
     "description": "Charts with the same group share tooltip and crosshair position and zoom/pan; each needs its\nown `chart.id`."
    },
    "locales": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/ApexLocale"
     },
     "description": "Locale definitions available to this chart (names of months and days, toolbar texts)."
    },
    "defaultLocale": {
     "type": "string",
     "description": "`name` of the locale (from `chart.locales` or the registered ones) that is used. Default:\n`'en'`.",
     "default": "en"
    },
    "parentHeightOffset": {
     "type": "number",
     "description": "Extra pixels added below the SVG in the wrapper's minimum height for axis charts with a pixel\nheight. Default: `15`.",
     "default": 15
    },
    "redrawOnParentResize": {
     "type": "boolean",
     "description": "Re-renders the chart when its container changes size (observed with ResizeObserver). Default:\n`true`.",
     "default": true
    },
    "redrawOnWindowResize": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "x-wcc-type": "Function"
      }
     ],
     "description": "Re-renders on window resize; a function is called on each resize and its return value decides.\nDefault: `true`.",
     "default": true
    },
    "sparkline": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Enables sparkline mode. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Minimal mode for small inline charts: hides axes, grid, legend and labels and removes the\npadding."
    },
    "stacked": {
     "type": "boolean",
     "description": "Stacks the series of bar, column and area charts on top of each other. Default: `false`.",
     "default": false
    },
    "stackType": {
     "type": "string",
     "enum": [
      "normal",
      "100%"
     ],
     "description": "'normal' adds the values; '100%' scales every stack to 100 percent. Default: `'normal'`.",
     "default": "normal"
    },
    "stackOnlyBar": {
     "type": "boolean",
     "description": "In combined charts, stack only the bar/column series and draw the others unstacked. Default:\n`true`.",
     "default": true
    },
    "toolbar": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the toolbar. Default: `true`.",
       "default": true
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the toolbar horizontally by this many pixels. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the toolbar vertically by this many pixels. Default: `0`.",
       "default": 0
      },
      "tools": {
       "type": "object",
       "properties": {
        "download": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "string"
          }
         ],
         "description": "Download menu (SVG, PNG, CSV). Default: `true`.",
         "default": true
        },
        "selection": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "string"
          }
         ],
         "description": "Button for the selection (brush) tool. Default: `true`.",
         "default": true
        },
        "zoom": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "string"
          }
         ],
         "description": "Button for drag-to-zoom. Default: `true`.",
         "default": true
        },
        "zoomin": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "string"
          }
         ],
         "description": "Zoom-in button. Default: `true`.",
         "default": true
        },
        "zoomout": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "string"
          }
         ],
         "description": "Zoom-out button. Default: `true`.",
         "default": true
        },
        "pan": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "string"
          }
         ],
         "description": "Button for the pan tool. Default: `true`.",
         "default": true
        },
        "reset": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "string"
          }
         ],
         "description": "Button that resets zoom and pan to the original range. Default: `true`.",
         "default": true
        },
        "customIcons": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "icon": {
            "type": "string",
            "description": "Markup (usually SVG) of the button."
           },
           "title": {
            "type": "string",
            "description": "Tooltip text and accessible name of the button."
           },
           "index": {
            "type": "number",
            "description": "Position among the toolbar buttons (0-based); without an index the button is appended."
           },
           "class": {
            "type": "string",
            "description": "CSS class added to the button."
           },
           "click": {
            "x-wcc-type": "function",
            "description": "Called when the button is pressed, with the chart, its options and the event."
           }
          },
          "additionalProperties": false
         },
         "description": "Extra buttons added to the toolbar. Default: `[]`.",
         "default": []
        }
       },
       "additionalProperties": false,
       "description": "Which buttons the toolbar shows. `true` shows the built-in icon, `false` hides it, a string\nis used as the icon markup."
      },
      "export": {
       "type": "object",
       "properties": {
        "csv": {
         "type": "object",
         "properties": {
          "filename": {
           "type": "string",
           "description": "File name without extension; not set uses `chart.id` or a generated id."
          },
          "columnDelimiter": {
           "type": "string",
           "description": "Separator written between columns. Default: `','`.",
           "default": ","
          },
          "headerCategory": {
           "type": "string",
           "description": "Header of the category / x column. Default: `'category'`.",
           "default": "category"
          },
          "headerValue": {
           "type": "string",
           "description": "Header of the value column for charts without axes (pie, donut, radialBar ...). Default: `'value'`.",
           "default": "value"
          },
          "categoryFormatter": {
           "x-wcc-type": "function",
           "description": "Function that turns each x value into the text written in the CSV."
          },
          "valueFormatter": {
           "x-wcc-type": "function",
           "description": "Function that turns each y value into the text written in the CSV."
          }
         },
         "additionalProperties": false,
         "description": "CSV download settings."
        },
        "svg": {
         "type": "object",
         "properties": {
          "filename": {
           "type": "string",
           "description": "File name without extension; not set uses `chart.id` or a generated id."
          }
         },
         "additionalProperties": false,
         "description": "SVG download settings."
        },
        "png": {
         "type": "object",
         "properties": {
          "filename": {
           "type": "string",
           "description": "File name without extension; not set uses `chart.id` or a generated id."
          }
         },
         "additionalProperties": false,
         "description": "PNG download settings."
        },
        "width": {
         "type": "number",
         "description": "Pixel width of the exported PNG; the scale factor is derived from it. Ignored when `scale`\nis set."
        },
        "scale": {
         "type": "number",
         "description": "Scale factor for the exported PNG (2 = twice the on-screen size)."
        }
       },
       "additionalProperties": false,
       "description": "Settings for the downloads offered in the toolbar menu."
      },
      "autoSelected": {
       "type": "string",
       "enum": [
        "zoom",
        "selection",
        "pan"
       ],
       "description": "Tool that is active when the chart loads. Default: `'zoom'`.",
       "default": "zoom"
      }
     },
     "additionalProperties": false,
     "description": "The tool buttons and download menu in the top right corner."
    },
    "zoom": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Enables zooming. Default: `true`.",
       "default": true
      },
      "type": {
       "type": "string",
       "enum": [
        "x",
        "y",
        "xy"
       ],
       "description": "Axis that is zoomed: 'x', 'y' or both ('xy'). Default: `'x'`.",
       "default": "x"
      },
      "autoScaleYaxis": {
       "type": "boolean",
       "description": "After an x zoom, fits the y axis to the visible data. Default: `false`.",
       "default": false
      },
      "allowMouseWheelZoom": {
       "type": "boolean",
       "description": "Zooms with the mouse wheel while the pointer is over the plot. Default: `true`.",
       "default": true
      },
      "zoomedArea": {
       "type": "object",
       "properties": {
        "fill": {
         "type": "object",
         "properties": {
          "color": {
           "type": "string",
           "description": "Fill colour of the zoom rectangle. Default: `'#90CAF9'`.",
           "default": "#90CAF9"
          },
          "opacity": {
           "type": "number",
           "description": "Fill opacity of the zoom rectangle (0 to 1). Default: `0.4`.",
           "default": 0.4
          }
         },
         "additionalProperties": false,
         "description": "Fill of the zoom rectangle."
        },
        "stroke": {
         "type": "object",
         "properties": {
          "color": {
           "type": "string",
           "description": "Border colour of the zoom rectangle. Default: `'#0D47A1'`.",
           "default": "#0D47A1"
          },
          "opacity": {
           "type": "number",
           "description": "Border opacity of the zoom rectangle (0 to 1). Default: `0.4`.",
           "default": 0.4
          },
          "width": {
           "type": "number",
           "description": "Border width of the zoom rectangle in pixels. Default: `1`.",
           "default": 1
          }
         },
         "additionalProperties": false,
         "description": "Border of the zoom rectangle."
        }
       },
       "additionalProperties": false,
       "description": "Look of the rectangle drawn while dragging a zoom area."
      }
     },
     "additionalProperties": false,
     "description": "Zooming of axis charts by dragging, buttons or the mouse wheel."
    },
    "selection": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Enables the selection tool. Default: `false`.",
       "default": false
      },
      "type": {
       "type": "string",
       "description": "Axis of the selection: 'x', 'y' or 'xy'. Default: `'x'`.",
       "default": "x"
      },
      "fill": {
       "type": "object",
       "properties": {
        "color": {
         "type": "string",
         "description": "Fill colour of the selection rectangle. Default: `'#24292e'`.",
         "default": "#24292e"
        },
        "opacity": {
         "type": "number",
         "description": "Fill opacity of the selection rectangle (0 to 1). Default: `0.1`.",
         "default": 0.1
        }
       },
       "additionalProperties": false,
       "description": "Fill of the selection rectangle."
      },
      "stroke": {
       "type": "object",
       "properties": {
        "width": {
         "type": "number",
         "description": "Border width in pixels. Default: `1`.",
         "default": 1
        },
        "color": {
         "type": "string",
         "description": "Border colour. Default: `'#24292e'`.",
         "default": "#24292e"
        },
        "opacity": {
         "type": "number",
         "description": "Border opacity (0 to 1). Default: `0.4`.",
         "default": 0.4
        },
        "dashArray": {
         "type": "number",
         "description": "Dash length of the border in pixels; 0 draws a solid line. Default: `3`.",
         "default": 3
        }
       },
       "additionalProperties": false,
       "description": "Border of the selection rectangle."
      },
      "xaxis": {
       "type": "object",
       "properties": {
        "min": {
         "type": "number",
         "description": "Start of the initial selection (x value)."
        },
        "max": {
         "type": "number",
         "description": "End of the initial selection (x value)."
        }
       },
       "additionalProperties": false,
       "description": "Initial selected x range."
      },
      "yaxis": {
       "type": "object",
       "properties": {
        "min": {
         "type": "number",
         "description": "Lower end of the initial selection (y value)."
        },
        "max": {
         "type": "number",
         "description": "Upper end of the initial selection (y value)."
        }
       },
       "additionalProperties": false,
       "description": "Initial selected y range (for 'y' / 'xy' selections)."
      }
     },
     "additionalProperties": false,
     "description": "A draggable range on the plot; on a brush chart it controls the targets."
    },
    "animations": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Master switch for all animations. Default: `true`.",
       "default": true
      },
      "respectReducedMotion": {
       "type": "boolean",
       "description": "West Coast Charts: no motion when the OS asks for reduced motion (default true)"
      },
      "largeDatasetThreshold": {
       "type": "number",
       "description": "West Coast Charts: above this many points (all series) path animations become a short fade; 0 = never. Default 2000"
      },
      "chartTypeMorph": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Set to false so a type switch draws the new type without the tween. Default: `true`.",
         "default": true
        },
        "speed": {
         "type": "number",
         "description": "Duration of the type tween in milliseconds. Default: `600`.",
         "default": 600
        }
       },
       "additionalProperties": false,
       "description": "West Coast Charts: tween between chart types on updateOptions({ chart: { type } }) (treemap / sunburst / icicle, violin / beeswarm)"
      },
      "easing": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "array",
         "prefixItems": [
          {
           "type": "number"
          },
          {
           "type": "number"
          },
          {
           "type": "number"
          },
          {
           "type": "number"
          }
         ],
         "minItems": 4,
         "maxItems": 4
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "West Coast Charts: easing curve name or function"
      },
      "speed": {
       "type": "number",
       "description": "Duration of the first-render animation in milliseconds. Default: `800`.",
       "default": 800
      },
      "animateGradually": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Enables the staggered start. Default: `true`.",
         "default": true
        },
        "delay": {
         "type": "number",
         "description": "Delay between two consecutive items in milliseconds. Default: `150`.",
         "default": 150
        }
       },
       "additionalProperties": false,
       "description": "Starts the series (and points) one after another instead of all at once."
      },
      "dynamicAnimation": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Animates data changes from the old to the new values. Default: `true`.",
         "default": true
        },
        "easing": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "prefixItems": [
            {
             "type": "number"
            },
            {
             "type": "number"
            },
            {
             "type": "number"
            },
            {
             "type": "number"
            }
           ],
           "minItems": 4,
           "maxItems": 4
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "West Coast Charts: easing for data-change animations"
        },
        "speed": {
         "type": "number",
         "description": "Duration of a data-change animation in milliseconds. Default: `350`.",
         "default": 350
        },
        "matchBy": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "x",
            "index"
           ]
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "West Coast Charts: how the points of an update pair with the previous\nones. 'index' (default, 4.7.0), 'x' (category or x value), or a key\nfunction. Markers, data labels and bar/column/box shapes then move\nwith their own point when data is reordered, added or removed."
        }
       },
       "additionalProperties": false,
       "description": "Animation of data changes (updateSeries, updateOptions, appendData)."
      },
      "resize": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Animates the redraw after a resize. Default: `false`.",
         "default": false
        },
        "speed": {
         "type": "number",
         "description": "Duration of the resize animation in milliseconds. Default: `300`.",
         "default": 300
        }
       },
       "additionalProperties": false,
       "description": "West Coast Charts: animate the redraw after a container/window resize\n(paths morph, markers and axis ticks glide to the new size). Opt-in;\noff = the 4.7.0 static redraw. A resize that arrives while an\nanimation runs is held until it finished either way."
      }
     },
     "additionalProperties": false,
     "description": "Motion settings for the first render, data updates and resizes."
    },
    "renderer": {
     "type": "string",
     "enum": [
      "auto",
      "svg",
      "canvas"
     ],
     "description": "renderer-canvas feature"
    },
    "rendererThreshold": {
     "type": "number",
     "description": "total points from which renderer 'auto' paints on canvas"
    },
    "wcc": {
     "type": "object",
     "properties": {
      "canvas": {
       "type": "object",
       "properties": {
        "pixelRatio": {
         "anyOf": [
          {
           "const": "device"
          },
          {
           "type": "number"
          }
         ],
         "description": "Backing-store scale; `'device'` uses the device pixel ratio capped at 2, a number forces it. Default: `'device'`.",
         "default": "device"
        },
        "cellCap": {
         "type": "number",
         "description": "Most scatter cells handed to the SVG layer as hover and tooltip proxy. Default: `20000`.",
         "default": 20000
        },
        "settleMs": {
         "type": "number",
         "description": "Time after the last pan or zoom input before the full update (tooltips, `zoomed` events), in milliseconds. Default: `140`.",
         "default": 140
        },
        "axisStride": {
         "type": "number",
         "description": "During a gesture, the axes and grid update every Nth frame; `0` picks it from the measured frame cost (at most 4). Default: `0`.",
         "default": 0
        }
       },
       "additionalProperties": false,
       "description": "Canvas renderer tuning."
      }
     },
     "additionalProperties": true,
     "description": "West Coast Charts chart-level extensions."
    },
    "link": {
     "$ref": "#/$defs/WccLinkOptions",
     "description": "Linked charts (highlight or crossfilter mode)."
    },
    "history": {
     "$ref": "#/$defs/WccHistoryOptions",
     "description": "Undo and redo of view changes."
    },
    "orient": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "$ref": "#/$defs/WccOrientOptions"
      }
     ],
     "description": "Orient feature (\"Ansicht ausrichten\"): turn radialColumn (with all its layers), chord, pie,\ndonut, polarArea and radialBar charts; `true` = `{ enabled: true }`."
    },
    "deterministic": {
     "type": "boolean",
     "description": "Deterministic rendering (agents, CLI, snapshot tests): no animation (the final frame only), no\nwall clock (see `now`), a seeded PRNG and stable ids, so the same options give byte-identical\nSVG in the same engine. On by itself in headless mode (`WestCoastCharts.headless = true` or\n`globalThis.WCC_HEADLESS = true`) unless set to `false`. Several deterministic charts on one\npage need distinct `chart.id`s (or seeds). Default: `false`.",
     "default": false
    },
    "seed": {
     "type": "number",
     "description": "Seed of the PRNG used for ids and random layouts. Default: a hash of `chart.id`."
    },
    "now": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      },
      {
       "x-wcc-type": "Date"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "The current time as the chart sees it (\"today\" in Gantt): ms since the epoch, a Date, a date\nstring or a function returning one of those. In deterministic mode without it there is no\nclock (no today marker). Default: `Date.now()`.",
     "x-wcc-default": "Date.now()"
    },
    "requestedType": {
     "type": "string",
     "description": "the type asked for ('gauge', 'funnel', ...); set by the library, chart.type holds the base renderer"
    },
    "validate": {
     "type": "string",
     "enum": [
      "error",
      "warn",
      "off"
     ],
     "description": "Option check when the validator module is loaded ('west-coast-charts/agent/validate'):\n`'warn'` logs unknown options, wrong types and invalid values with a suggestion\n(console.warn, once per chart), `'error'` also makes `render()` reject, `'off'` skips the\ncheck. Without the module nothing is checked. Default: `'warn'`.",
     "default": "warn"
    }
   },
   "additionalProperties": false,
   "description": "Chart type, size, toolbar, zoom, animations, events and other chart-wide settings."
  },
  "colors": {
   "type": "array",
   "items": {},
   "description": "Series colours in order (CSS colours, or functions returning one); not set uses the theme\npalette."
  },
  "dataLabels": {
   "$ref": "#/$defs/ApexDataLabels",
   "description": "Value labels drawn on the data points."
  },
  "fill": {
   "$ref": "#/$defs/ApexFill",
   "description": "How series areas, bars and slices are filled (solid, gradient, pattern, image)."
  },
  "forecastDataPoints": {
   "$ref": "#/$defs/ApexForecastDataPoints",
   "description": "Draws the last points of line series dashed, to mark them as a forecast."
  },
  "grid": {
   "$ref": "#/$defs/ApexGrid",
   "description": "Grid lines, background bands and the padding around the plot."
  },
  "labels": {
   "type": "array",
   "items": {
    "anyOf": [
     {
      "type": "string"
     },
     {
      "type": "number"
     }
    ]
   },
   "description": "Names of the slices for pie, donut, polar area and radial bar charts, or x categories for\naxis charts. Default: `[]`.",
   "default": []
  },
  "legend": {
   "$ref": "#/$defs/ApexLegend",
   "description": "The list of series names with their colours."
  },
  "markers": {
   "$ref": "#/$defs/ApexMarkers",
   "description": "Point markers of line, area and scatter series."
  },
  "noData": {
   "$ref": "#/$defs/ApexNoData",
   "description": "Text shown when there is no data to draw."
  },
  "plotOptions": {
   "type": "object",
   "properties": {
    "line": {
     "type": "object",
     "properties": {
      "isSlopeChart": {
       "type": "boolean",
       "description": "Draws a slope chart: each series connects its first and last value, with labels at both ends.\nDefault: `false`.",
       "default": false
      },
      "colors": {
       "type": "object",
       "properties": {
        "threshold": {
         "type": "number",
         "description": "The value at which the line changes colour. Default: `0`.",
         "default": 0
        },
        "colorAboveThreshold": {
         "type": "string",
         "description": "Line colour above the threshold."
        },
        "colorBelowThreshold": {
         "type": "string",
         "description": "Line colour below the threshold."
        }
       },
       "additionalProperties": false,
       "description": "Colours a line by value relative to a threshold."
      }
     },
     "additionalProperties": false,
     "description": "Settings of line series."
    },
    "area": {
     "type": "object",
     "properties": {
      "fillTo": {
       "type": "string",
       "enum": [
        "end",
        "origin"
       ],
       "description": "'origin' fills down to the zero line; 'end' fills to the bottom of the plot. Default:\n`'origin'`.",
       "default": "origin"
      }
     },
     "additionalProperties": false,
     "description": "Settings of area series."
    },
    "bar": {
     "type": "object",
     "properties": {
      "wcc": {
       "type": "object",
       "properties": {
        "mark": {
         "type": "string",
         "enum": [
          "lollipop",
          "ringStem"
         ],
         "description": "`'lollipop'` (stem and dot) or `'ringStem'` (stem and ring) instead of the bar."
        },
        "stemWidth": {
         "type": "number",
         "description": "Stem width in pixels. Default: `2`.",
         "default": 2
        },
        "headRadius": {
         "type": "number",
         "description": "Head radius in pixels. Default: `6`.",
         "default": 6
        }
       },
       "additionalProperties": false,
       "description": "West Coast Charts: opt-in bar marks."
      },
      "horizontal": {
       "type": "boolean",
       "description": "Draws horizontal bars instead of vertical columns. Default: `false`.",
       "default": false
      },
      "columnWidth": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Width of a column as a percentage of its category slot (or pixels as a number); vertical bars\nonly. Default: `'70%'`.",
       "default": "70%"
      },
      "barHeight": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Height of a bar as a percentage of its category slot (or pixels as a number); horizontal bars\nonly. Default: `'70%'`.",
       "default": "70%"
      },
      "distributed": {
       "type": "boolean",
       "description": "Gives every bar of a single series its own palette colour (and its own legend entry).\nDefault: `false`.",
       "default": false
      },
      "borderRadius": {
       "type": "number",
       "description": "Corner radius of the bars in pixels. Default: `0`.",
       "default": 0
      },
      "borderRadiusApplication": {
       "type": "string",
       "enum": [
        "end",
        "around"
       ],
       "description": "'around' rounds both ends of a bar; 'end' rounds only the end away from the axis (for stacks:\nonly the outer end of the stack). Default: `'around'`.",
       "default": "around"
      },
      "borderRadiusWhenStacked": {
       "type": "string",
       "enum": [
        "all",
        "last"
       ],
       "description": "Accepted for ApexCharts 4.x compatibility; stacked rounding follows\n`borderRadiusApplication`. Default: `'last'`.",
       "default": "last"
      },
      "hideZeroBarsWhenGrouped": {
       "type": "boolean",
       "description": "In grouped bars, leaves no gap for zero values: the remaining bars of the category share its\nslot. Default: `false`.",
       "default": false
      },
      "rangeBarOverlap": {
       "type": "boolean",
       "description": "With `rangeBarGroupRows`, false moves overlapping ranges in a row into separate lanes; true\nlets them overlap. Default: `true`.",
       "default": true
      },
      "rangeBarGroupRows": {
       "type": "boolean",
       "description": "Puts the ranges of all series with the same x label into one row (timeline view). Default:\n`false`.",
       "default": false
      },
      "isDumbbell": {
       "type": "boolean",
       "description": "Draws range bars as dumbbells: a thin bar with a dot at each end. Default: `false`.",
       "default": false
      },
      "dumbbellColors": {
       "type": "array",
       "items": {
        "type": "array",
        "items": {
         "type": "string"
        }
       },
       "description": "Colours of the two dumbbell ends per series (`[[start, end], ...]`); not set uses the series\ncolours."
      },
      "isFunnel": {
       "type": "boolean",
       "description": "Draws a horizontal bar series as a centred funnel. Default: `false`.",
       "default": false
      },
      "isFunnel3d": {
       "type": "boolean",
       "description": "Adds the shaded connecting faces between funnel steps. Default: `true`.",
       "default": true
      },
      "colors": {
       "type": "object",
       "properties": {
        "ranges": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "from": {
            "type": "number",
            "description": "Lower end of the range (inclusive)."
           },
           "to": {
            "type": "number",
            "description": "Upper end of the range (inclusive)."
           },
           "color": {
            "type": "string",
            "description": "Bar colour for values in the range."
           }
          },
          "additionalProperties": false
         },
         "description": "Value ranges with their own bar colour. Default: `[]`.",
         "default": []
        },
        "backgroundBarColors": {
         "type": "array",
         "items": {
          "type": "string"
         },
         "description": "Colours of full-length bars drawn behind each category, repeated in order; empty draws\nnone. Default: `[]`.",
         "default": []
        },
        "backgroundBarOpacity": {
         "type": "number",
         "description": "Opacity of the background bars (0 to 1). Default: `1`.",
         "default": 1
        },
        "backgroundBarRadius": {
         "type": "number",
         "description": "Corner radius of the background bars in pixels. Default: `0`.",
         "default": 0
        }
       },
       "additionalProperties": false,
       "description": "Colouring of bars by value and the background bars."
      },
      "dataLabels": {
       "type": "object",
       "properties": {
        "maxItems": {
         "type": "number",
         "description": "Above this many bars with labels enabled, a performance warning is logged. Default: `100`.",
         "default": 100
        },
        "hideOverflowingLabels": {
         "type": "boolean",
         "description": "Hides a label that does not fit inside its bar. Default: `true`.",
         "default": true
        },
        "position": {
         "type": "string",
         "description": "'top', 'center' or 'bottom' of the bar (for horizontal bars: end, centre, start). Default:\n`'top'`.",
         "default": "top"
        },
        "orientation": {
         "type": "string",
         "enum": [
          "horizontal",
          "vertical"
         ],
         "description": "'horizontal' or 'vertical' text. Default: `'horizontal'`.",
         "default": "horizontal"
        },
        "total": {
         "type": "object",
         "properties": {
          "enabled": {
           "type": "boolean",
           "description": "Shows the stack totals (stacked bars only). Default: `false`.",
           "default": false
          },
          "formatter": {
           "x-wcc-type": "function",
           "description": "Function that returns the total text from the sum."
          },
          "offsetX": {
           "type": "number",
           "description": "Moves the totals horizontally. Default: `0`.",
           "default": 0
          },
          "offsetY": {
           "type": "number",
           "description": "Moves the totals vertically. Default: `0`.",
           "default": 0
          },
          "style": {
           "type": "object",
           "properties": {
            "color": {
             "type": "string",
             "description": "Text colour of the totals; unset inherits `chart.foreColor`. An explicit colour overrides the theme."
            },
            "fontSize": {
             "type": "string",
             "description": "Font size of the totals. Default: `'12px'`.",
             "default": "12px"
            },
            "fontFamily": {
             "type": "string",
             "description": "Font family of the totals; not set uses `chart.fontFamily`."
            },
            "fontWeight": {
             "anyOf": [
              {
               "type": "string"
              },
              {
               "type": "number"
              }
             ],
             "description": "Font weight of the totals. Default: `600`.",
             "default": 600
            }
           },
           "additionalProperties": false,
           "description": "Text style of the totals."
          }
         },
         "additionalProperties": false,
         "description": "Sum label at the end of each stack."
        }
       },
       "additionalProperties": false,
       "description": "Placement of the value labels on bars."
      },
      "dumbbell": {
       "type": "object",
       "properties": {
        "connector": {
         "type": "object",
         "properties": {
          "color": {
           "type": "string",
           "description": "Connector colour; not set draws a gradient between the two end colours."
          },
          "opacity": {
           "type": "number",
           "description": "Connector opacity. Default: `0.55`.",
           "default": 0.55
          }
         },
         "additionalProperties": false,
         "description": "Line joining the two ends of a dumbbell."
        },
        "dataLabels": {
         "type": "object",
         "properties": {
          "enabled": {
           "type": "boolean",
           "description": "Draws the end labels. Default: `false`.",
           "default": false
          },
          "offset": {
           "type": "number",
           "description": "Distance of a label from its end marker in pixels. Default: `6`.",
           "default": 6
          },
          "colorFromMarker": {
           "type": "boolean",
           "description": "Colours each label like its end marker. Default: `true`.",
           "default": true
          },
          "formatter": {
           "x-wcc-type": "function",
           "description": "Returns the label text."
          },
          "style": {
           "$ref": "#/$defs/WccTextStyle",
           "description": "Text style of the labels (fontSize default '12px', fontWeight 600)."
          }
         },
         "additionalProperties": false,
         "description": "Value labels at both ends."
        },
        "tooltip": {
         "type": "object",
         "properties": {
          "differenceLabel": {
           "type": "string",
           "description": "Label of the difference row in the tooltip. Default: `'Difference'`.",
           "default": "Difference"
          }
         },
         "additionalProperties": false,
         "description": "Tooltip additions of dumbbells."
        }
       },
       "additionalProperties": false,
       "description": "Settings of dumbbell bars."
      }
     },
     "additionalProperties": false,
     "description": "Settings of bar, column and range bar series.\nDumbbell settings of bar charts."
    },
    "bubble": {
     "type": "object",
     "properties": {
      "zScaling": {
       "type": "boolean",
       "description": "Scales the z values to the plot size; false uses z directly as the radius in pixels. Default:\n`true`.",
       "default": true
      },
      "minBubbleRadius": {
       "type": "number",
       "description": "Smallest radius in pixels; smaller bubbles are enlarged to it."
      },
      "maxBubbleRadius": {
       "type": "number",
       "description": "Largest radius in pixels; bigger bubbles are reduced to it."
      },
      "minZ": {
       "type": "number",
       "description": "z values mapped to the smallest / largest bubble (default: the data range)"
      },
      "maxZ": {
       "type": "number",
       "description": "Fixes the top of the z range instead of taking the data maximum, so several charts size\nbubbles alike."
      }
     },
     "additionalProperties": false,
     "description": "Settings of bubble series."
    },
    "candlestick": {
     "type": "object",
     "properties": {
      "type": {
       "type": "string",
       "description": "'candlestick' (boxes) or 'ohlc' (open/close ticks on a line)."
      },
      "colors": {
       "type": "object",
       "properties": {
        "upward": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Colour when close is above open. Default: `'#00B746'`.",
         "default": "#00B746"
        },
        "downward": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Colour when close is below open. Default: `'#EF403C'`.",
         "default": "#EF403C"
        }
       },
       "additionalProperties": false,
       "description": "Colours of rising and falling candles."
      },
      "wick": {
       "type": "object",
       "properties": {
        "useFillColor": {
         "type": "boolean",
         "description": "Draws the wick in the candle colour; false uses the stroke colour. Default: `true`.",
         "default": true
        }
       },
       "additionalProperties": false,
       "description": "The high/low lines."
      }
     },
     "additionalProperties": false,
     "description": "Settings of candlestick series."
    },
    "boxPlot": {
     "type": "object",
     "properties": {
      "wcc": {
       "type": "object",
       "properties": {
        "jitter": {
         "type": "number",
         "description": "Spread (0 to 1 of the box width) of scatter series drawn over the boxes; same on every render. Default: `0`.",
         "default": 0
        }
       },
       "additionalProperties": false,
       "description": "West Coast Charts: box plot extras."
      },
      "colors": {
       "type": "object",
       "properties": {
        "upper": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Colour of the part between median and upper quartile. Default: `'#00E396'`.",
         "default": "#00E396"
        },
        "lower": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Colour of the part between lower quartile and median. Default: `'#008FFB'`.",
         "default": "#008FFB"
        }
       },
       "additionalProperties": false,
       "description": "Colours of the two box halves."
      },
      "whiskers": {
       "type": "string",
       "enum": [
        "minmax",
        "tukey",
        "percentile"
       ],
       "description": "raw-sample boxes (data[].points): whisker rule; needs west-coast-charts/types"
      },
      "whiskerPercentiles": {
       "type": "array",
       "prefixItems": [
        {
         "type": "number"
        },
        {
         "type": "number"
        }
       ],
       "minItems": 2,
       "maxItems": 2,
       "description": "quantiles (percent) for whiskers: 'percentile'; default [5, 95]"
      },
      "points": {
       "type": "object",
       "properties": {
        "show": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "all",
            "outliers"
           ]
          },
          {
           "type": "boolean"
          }
         ],
         "description": "true or 'all' draws every sample, 'outliers' only those beyond the whiskers; false draws\nnone. Needs `west-coast-charts/types`.\nfalse: none; true or 'all': every sample; 'outliers': only those outside the whiskers"
        },
        "shape": {
         "type": "string",
         "enum": [
          "circle",
          "square"
         ],
         "description": "Dot shape. Default: `'circle'`.\nPoint shape: 'circle' or 'square'. Default: `'circle'`.",
         "default": "circle"
        },
        "size": {
         "type": "number",
         "description": "Dot radius in pixels. Default: `2.5`.\nPoint radius in pixels. Default: `2.5`.",
         "default": 2.5
        },
        "jitter": {
         "type": "number",
         "description": "Horizontal spread of the dots as a share of the box width (0 to 1). Default: `0.5`.\n0..1 of the lane width",
         "default": 0.5
        },
        "maxPoints": {
         "type": "number",
         "description": "Upper limit of drawn dots per chart. Default: `3000`.\nUpper limit of drawn points; above it the samples are thinned. Default: `3000`.",
         "default": 3000
        },
        "opacity": {
         "type": "number",
         "description": "Dot opacity (0 to 1).\nPoint opacity. Default: `0.9`.",
         "default": 0.9
        },
        "fillColor": {
         "type": "string",
         "description": "'series-dark' (a darker series colour), 'series' or any CSS colour.\n'series-dark' | 'series' | a colour"
        },
        "strokeColor": {
         "type": "string",
         "description": "Dot outline colour; white or not set uses the theme surface colour.\nPoint outline colour. Default: `'#fff'`.",
         "default": "#fff"
        },
        "strokeWidth": {
         "type": "number",
         "description": "Dot outline width in pixels.\nPoint outline width in pixels. Default: `1`.",
         "default": 1
        },
        "colorScale": {
         "type": "object",
         "properties": {
          "colors": {
           "type": "array",
           "items": {
            "type": "string"
           },
           "description": "Colours from the lowest to the highest value."
          },
          "min": {
           "type": "number",
           "description": "Value mapped to the first colour; not set uses the smallest sample."
          },
          "max": {
           "type": "number",
           "description": "Value mapped to the last colour; not set uses the largest sample."
          },
          "steps": {
           "type": "number",
           "description": "Number of discrete colour steps; not set gives a continuous scale."
          }
         },
         "additionalProperties": false,
         "description": "Colours the dots by value instead of a fixed colour.\nColours the points by value instead of by series (violin default: 24 steps)."
        }
       },
       "additionalProperties": false,
       "description": "observation dots over raw-sample boxes\nRaw samples drawn over the boxes."
      }
     },
     "additionalProperties": false,
     "description": "Settings of box plot series.\nRaw-sample settings of box plots."
    },
    "heatmap": {
     "type": "object",
     "properties": {
      "wcc": {
       "type": "object",
       "properties": {
        "centerTimeLabels": {
         "type": "boolean",
         "description": "Datetime x axis: centres the time labels on the equal-width cells. Default: `false`.",
         "default": false
        }
       },
       "additionalProperties": false,
       "description": "West Coast Charts: heatmap extras."
      },
      "radius": {
       "type": "number",
       "description": "Corner radius of the cells in pixels. Default: `2`.",
       "default": 2
      },
      "enableShades": {
       "type": "boolean",
       "description": "Shades each cell from its series colour by value; false uses the flat colour. Default:\n`true`.",
       "default": true
      },
      "shadeIntensity": {
       "type": "number",
       "description": "Strength of the value shading (0 to 1). Default: `0.5`.",
       "default": 0.5
      },
      "reverseNegativeShade": {
       "type": "boolean",
       "description": "With negative values, shades by distance from zero so large negative values are dark too.\nDefault: `false`.",
       "default": false
      },
      "distributed": {
       "type": "boolean",
       "description": "Shades each row by its own minimum and maximum instead of the whole chart. Default: `false`.",
       "default": false
      },
      "useFillColorAsStroke": {
       "type": "boolean",
       "description": "Draws the cell border in the cell colour instead of the stroke colour. Default: `false`.",
       "default": false
      },
      "colorScale": {
       "type": "object",
       "properties": {
        "ranges": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "from": {
            "type": "number",
            "description": "Lower end of the range."
           },
           "to": {
            "type": "number",
            "description": "Upper end of the range."
           },
           "color": {
            "type": "string",
            "description": "Cell colour for values in the range."
           },
           "foreColor": {
            "type": "string",
            "description": "Data label colour on cells in the range."
           },
           "name": {
            "type": "string",
            "description": "Legend text for the range."
           }
          },
          "additionalProperties": false
         },
         "description": "Value ranges with their own colour; cells outside every range keep the series colour.\nDefault: `[]`.",
         "default": []
        },
        "inverse": {
         "type": "boolean",
         "description": "Reverses the shading direction (high values light). Default: `false`.",
         "default": false
        },
        "min": {
         "type": "number",
         "description": "Value treated as the minimum for shading; not set uses the data minimum."
        },
        "max": {
         "type": "number",
         "description": "Value treated as the maximum for shading; not set uses the data maximum."
        }
       },
       "additionalProperties": false,
       "description": "Fixed colours for value ranges."
      },
      "shape": {
       "type": "string",
       "enum": [
        "circle",
        "rect",
        "diamond",
        "hexagon"
       ],
       "description": "Cell shape: 'rect', 'hexagon', 'circle' or 'diamond'. Default: `'rect'`.",
       "default": "rect"
      },
      "shapeAspect": {
       "type": "string",
       "enum": [
        "fill",
        "regular"
       ],
       "description": "hexagons: 'regular' (letterboxed) or 'fill' (stretched)"
      },
      "empty": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "object",
         "properties": {
          "label": {
           "type": "string",
           "description": "Name of the state, such as 'closed'. Default: `'No value'`.",
           "default": "No value"
          },
          "color": {
           "type": "string",
           "description": "Hatch colour; not set uses a neutral grey of the theme."
          },
          "legend": {
           "type": "boolean",
           "description": "Legend entry after the colour ranges (only with `colorScale.ranges`). Default: `true`.",
           "default": true
          }
         },
         "additionalProperties": false
        }
       ],
       "description": "Cells without a value (null) as their own state, such as closed hours: a neutral hatch\ninstead of a colour of the scale, a legend entry after the colour ranges, and the label in\nthe tooltip, the data table and `describe()`. `true` uses the label 'No value'. Needs the\nchart types bundle. Default: not set (null cells keep the 4.7.0 behaviour)."
      }
     },
     "additionalProperties": false,
     "description": "Settings of heatmap series.\nCell shape settings of heatmaps."
    },
    "treemap": {
     "type": "object",
     "properties": {
      "enableShades": {
       "type": "boolean",
       "description": "Shades each tile from its series colour by value. Default: `true`.",
       "default": true
      },
      "shadeIntensity": {
       "type": "number",
       "description": "Strength of the value shading (0 to 1). Default: `0.5`.",
       "default": 0.5
      },
      "distributed": {
       "type": "boolean",
       "description": "Gives every tile its own palette colour. Default: `false`.",
       "default": false
      },
      "reverseNegativeShade": {
       "type": "boolean",
       "description": "With negative values, shades by distance from zero. Default: `false`.",
       "default": false
      },
      "useFillColorAsStroke": {
       "type": "boolean",
       "description": "Draws the tile border in the tile colour. Default: `false`.",
       "default": false
      },
      "dataLabels": {
       "type": "object",
       "properties": {
        "format": {
         "type": "string",
         "enum": [
          "scale",
          "truncate"
         ],
         "description": "'scale' shrinks the font to fit the tile; 'truncate' keeps the size and cuts the text. Default: `'scale'`.",
         "default": "scale"
        },
        "showValue": {
         "type": "boolean",
         "description": "Shows the value under the name. Default: `true`.",
         "default": true
        },
        "minFontSize": {
         "type": "number",
         "description": "Smallest font size in pixels before a label is dropped."
        },
        "align": {
         "type": "string",
         "enum": [
          "left",
          "center"
         ],
         "description": "Horizontal label position: `'left'` or `'center'`. Default: `'left'`.",
         "default": "left"
        }
       },
       "additionalProperties": false,
       "description": "Text of the tile labels.\nNested treemaps: labels of the leaf tiles."
      },
      "borderRadius": {
       "type": "number",
       "description": "Corner radius of the tiles in pixels. Default: `4`.",
       "default": 4
      },
      "colorScale": {
       "type": "object",
       "properties": {
        "inverse": {
         "type": "boolean",
         "description": "Reverses the shading direction. Default: `false`.",
         "default": false
        },
        "ranges": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "from": {
            "type": "number",
            "description": "Lower end of the range."
           },
           "to": {
            "type": "number",
            "description": "Upper end of the range."
           },
           "color": {
            "type": "string",
            "description": "Tile colour for values in the range."
           },
           "foreColor": {
            "type": "string",
            "description": "Label colour on tiles in the range."
           },
           "name": {
            "type": "string",
            "description": "Legend text for the range."
           }
          },
          "additionalProperties": false
         },
         "description": "Value ranges with their own colour. Default: `[]`.",
         "default": []
        },
        "min": {
         "type": "number",
         "description": "Value treated as the minimum for shading."
        },
        "max": {
         "type": "number",
         "description": "Value treated as the maximum for shading."
        },
        "colorValue": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "Field of the data points (or function of the raw point and `{ node, w }`) that colours the tiles on a gradient."
        },
        "gradient": {
         "type": "object",
         "properties": {
          "enabled": {
           "type": "boolean",
           "description": "`false` keeps the series colours. Default: `true`.",
           "default": true
          },
          "min": {
           "type": "number",
           "description": "Lower end of the domain; not set uses the data minimum."
          },
          "max": {
           "type": "number",
           "description": "Upper end of the domain; not set uses the data maximum."
          },
          "midpoint": {
           "type": "number",
           "description": "Value of the middle colour; defaults to 0 when the domain spans 0."
          },
          "symmetric": {
           "type": "boolean",
           "description": "Balances the domain around `midpoint`. Default: `false`.",
           "default": false
          },
          "stops": {
           "type": "array",
           "items": {
            "type": "object",
            "properties": {
             "value": {
              "type": "number"
             },
             "color": {
              "type": "string"
             }
            },
            "required": [
             "value",
             "color"
            ],
            "additionalProperties": false
           },
           "description": "Own colour stops."
          }
         },
         "additionalProperties": false,
         "description": "The colour gradient of `colorValue`."
        },
        "gradientLegend": {
         "type": "object",
         "properties": {
          "enabled": {
           "type": "boolean",
           "description": "Draws the strip. Default: `true`.",
           "default": true
          },
          "width": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "number"
            }
           ],
           "description": "Strip length in pixels or as a `'60%'` string. Default: `min(320, 60% of the width)`.",
           "x-wcc-default": "min(320, 60% of the width)"
          },
          "thickness": {
           "type": "number",
           "description": "Strip thickness in pixels. Default: `10`.",
           "default": 10
          },
          "align": {
           "type": "string",
           "enum": [
            "right",
            "left",
            "center"
           ],
           "description": "Strip position: `'left'`, `'center'` or `'right'`. Default: `'center'`.",
           "default": "center"
          },
          "stops": {
           "type": "number",
           "description": "Gradient steps drawn (2 to 64). Default: `16`.",
           "default": 16
          },
          "showLabels": {
           "type": "boolean",
           "description": "Shows the min and max labels. Default: `true`.",
           "default": true
          },
          "showHoverValue": {
           "type": "boolean",
           "description": "Moves an arrow to the value of the hovered tile. Default: `true`.",
           "default": true
          },
          "labelStyle": {
           "type": "object",
           "properties": {
            "fontSize": {
             "anyOf": [
              {
               "type": "string"
              },
              {
               "type": "number"
              }
             ]
            },
            "color": {
             "type": "string"
            },
            "fontFamily": {
             "type": "string"
            }
           },
           "additionalProperties": false,
           "description": "Style of the labels."
          },
          "arrow": {
           "type": "object",
           "properties": {
            "size": {
             "type": "number"
            },
            "color": {
             "type": "string"
            }
           },
           "additionalProperties": false,
           "description": "Hover arrow."
          },
          "formatter": {
           "x-wcc-type": "function",
           "description": "Formats the labels and hover value."
          }
         },
         "additionalProperties": false,
         "description": "Gradient strip that replaces the categorical legend."
        }
       },
       "additionalProperties": false,
       "description": "Fixed colours for value ranges.\nNested treemaps: continuous colour by a second metric."
      },
      "seriesTitle": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Shows the badges. Default: `true`.",
         "default": true
        },
        "offsetY": {
         "type": "number",
         "description": "Moves the badge vertically. Default: `1`.",
         "default": 1
        },
        "offsetX": {
         "type": "number",
         "description": "Moves the badge horizontally. Default: `1`.",
         "default": 1
        },
        "borderColor": {
         "type": "string",
         "description": "Badge border colour. Default: `'#000'`.",
         "default": "#000"
        },
        "borderWidth": {
         "type": "number",
         "description": "Badge border width in pixels. Default: `1`.",
         "default": 1
        },
        "borderRadius": {
         "type": "number",
         "description": "Badge corner radius in pixels. Default: `2`.",
         "default": 2
        },
        "style": {
         "type": "object",
         "properties": {
          "background": {
           "type": "string",
           "description": "Badge background colour. Default: `'rgba(0, 0, 0, 0.6)'`.",
           "default": "rgba(0, 0, 0, 0.6)"
          },
          "color": {
           "type": "string",
           "description": "Badge text colour. Default: `'#fff'`.",
           "default": "#fff"
          },
          "fontSize": {
           "type": "string",
           "description": "Badge font size. Default: `'12px'`.",
           "default": "12px"
          },
          "fontFamily": {
           "type": "string",
           "description": "Badge font family."
          },
          "fontWeight": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "number"
            }
           ],
           "description": "Badge font weight. Default: `400`.",
           "default": 400
          },
          "cssClass": {
           "type": "string",
           "description": "CSS class added to the badge. Default: `''`.",
           "default": ""
          },
          "padding": {
           "type": "object",
           "properties": {
            "left": {
             "type": "number",
             "description": "Left padding in pixels. Default: `6`.",
             "default": 6
            },
            "right": {
             "type": "number",
             "description": "Right padding in pixels. Default: `6`.",
             "default": 6
            },
            "top": {
             "type": "number",
             "description": "Top padding in pixels. Default: `2`.",
             "default": 2
            },
            "bottom": {
             "type": "number",
             "description": "Bottom padding in pixels. Default: `2`.",
             "default": 2
            }
           },
           "additionalProperties": false,
           "description": "Space between badge text and border."
          }
         },
         "additionalProperties": false,
         "description": "Text and box style of the badge."
        }
       },
       "additionalProperties": false,
       "description": "Name badge drawn on each series block when there are several series."
      },
      "zoomOnClick": {
       "type": "boolean",
       "description": "nested treemaps (series data with children): click a parent to zoom into it"
      },
      "zoom": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "false turns zooming off; it is on unless this or `zoomOnClick` is false."
        },
        "breadcrumb": {
         "anyOf": [
          {
           "const": false
          },
          {
           "type": "object",
           "properties": {
            "rootLabel": {
             "type": "string",
             "description": "Text of the first breadcrumb. Default: `'All'`.",
             "default": "All"
            },
            "separator": {
             "type": "string",
             "description": "Text between breadcrumbs. Default: `'›'`.",
             "default": "›"
            },
            "position": {
             "type": "string",
             "enum": [
              "top-left",
              "top-right"
             ],
             "description": "Corner of the breadcrumb: `'top-left'` or `'top-right'`. Default: `'top-left'`.",
             "default": "top-left"
            }
           },
           "additionalProperties": false
          }
         ],
         "description": "Breadcrumb path shown while zoomed; false hides it."
        }
       },
       "additionalProperties": false,
       "description": "Zoom into nested treemaps."
      },
      "nested": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Turns nesting on; data with `children` nests on its own."
        },
        "drilldownAsLevels": {
         "type": "boolean",
         "description": "Treats the `drilldown.series` levels as children of the points that reference them. Default: `false`.",
         "default": false
        }
       },
       "additionalProperties": false,
       "description": "Nested treemaps (data with `children`)."
      },
      "tint": {
       "type": "number",
       "description": "Nested treemaps: lightens (positive) or darkens (negative) child tiles per depth, 0 to 1. Default: `0`.",
       "default": 0
      },
      "parents": {
       "$ref": "#/$defs/WccTreemapLevel",
       "description": "Style of parent (group) tiles, applied to every depth."
      },
      "levels": {
       "type": "array",
       "items": {
        "$ref": "#/$defs/WccTreemapLevel"
       },
       "description": "Per-depth overrides merged over `parents`; index 0 is the top level."
      }
     },
     "additionalProperties": false,
     "description": "Settings of treemap series.\nZoom settings of nested treemaps."
    },
    "pie": {
     "type": "object",
     "properties": {
      "wcc": {
       "type": "object",
       "properties": {
        "segmentGap": {
         "type": "number",
         "description": "Gap between segments in pixels."
        },
        "segmentRadius": {
         "type": "number",
         "description": "Corner radius of the segments in pixels."
        }
       },
       "additionalProperties": false,
       "description": "West Coast Charts: opt-in segment styling (pie and donut, not polarArea)."
      },
      "startAngle": {
       "type": "number",
       "description": "Angle in degrees where the first slice starts (0 = 12 o'clock, clockwise). Default: `0`.",
       "default": 0
      },
      "endAngle": {
       "type": "number",
       "description": "Angle in degrees where the last slice ends; 180 with startAngle -90 gives a half circle.\nDefault: `360`.",
       "default": 360
      },
      "customScale": {
       "type": "number",
       "description": "Scale factor applied to the whole pie (1 = fit). Default: `1`.",
       "default": 1
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the pie horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the pie vertically. Default: `0`.",
       "default": 0
      },
      "expandOnClick": {
       "type": "boolean",
       "description": "Pulls a clicked slice out of the pie. Default: `true`.",
       "default": true
      },
      "dataLabels": {
       "type": "object",
       "properties": {
        "offset": {
         "type": "number",
         "description": "Moves the labels outward (positive) or inward (negative), in pixels. Default: `0`.",
         "default": 0
        },
        "minAngleToShowLabel": {
         "type": "number",
         "description": "Slices smaller than this angle in degrees get no label. Default: `10`.",
         "default": 10
        }
       },
       "additionalProperties": false,
       "description": "Placement of the slice labels."
      },
      "donut": {
       "type": "object",
       "properties": {
        "size": {
         "type": "string",
         "description": "Diameter of the hole as a percentage of the pie. Default: `'65%'`.",
         "default": "65%"
        },
        "background": {
         "type": "string",
         "description": "Fill colour of the hole. Default: `'transparent'`.",
         "default": "transparent"
        },
        "labels": {
         "type": "object",
         "properties": {
          "readability": {
           "anyOf": [
            {
             "type": "string",
             "enum": [
              "none",
              "halo",
              "pill",
              "auto",
              "hide"
             ]
            },
            {
             "type": "boolean"
            },
            {
             "type": "object",
             "properties": {
              "mode": {
               "type": "string",
               "enum": [
                "none",
                "halo",
                "pill",
                "auto",
                "hide"
               ],
               "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
              },
              "fallback": {
               "type": "string",
               "enum": [
                "halo",
                "pill",
                "hide"
               ],
               "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
              },
              "enabled": {
               "type": "boolean",
               "description": "false switches the treatment off for this label kind"
              },
              "contrast": {
               "type": "boolean",
               "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
              },
              "minRatio": {
               "type": "number",
               "description": "WCAG 2 contrast ratio to reach. Default 4.5"
              },
              "light": {
               "type": "string",
               "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
              },
              "dark": {
               "type": "string",
               "description": "Dark colour of the pair. Default: `'#111827'`.",
               "default": "#111827"
              },
              "background": {
               "type": "string",
               "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
              },
              "halo": {
               "type": "object",
               "properties": {
                "width": {
                 "type": "number",
                 "description": "Outline width in pixels. Default: `3`.",
                 "default": 3
                },
                "color": {
                 "type": "string",
                 "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
                 "default": "auto"
                },
                "opacity": {
                 "type": "number",
                 "description": "Outline opacity (0 to 1). Default: `0.92`.",
                 "default": 0.92
                },
                "blur": {
                 "type": "number",
                 "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
                 "default": 0
                }
               },
               "additionalProperties": false,
               "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
              },
              "pill": {
               "type": "object",
               "properties": {
                "fill": {
                 "type": "string",
                 "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
                 "default": "auto"
                },
                "opacity": {
                 "type": "number",
                 "description": "Box opacity (0 to 1). Default: `0.9`.",
                 "default": 0.9
                },
                "radius": {
                 "type": "number",
                 "description": "Corner radius in pixels. Default: `4`.",
                 "default": 4
                },
                "padding": {
                 "anyOf": [
                  {
                   "type": "number"
                  },
                  {
                   "type": "array",
                   "prefixItems": [
                    {
                     "type": "number"
                    },
                    {
                     "type": "number"
                    }
                   ],
                   "minItems": 2,
                   "maxItems": 2
                  }
                 ],
                 "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
                 "default": [
                  1,
                  4
                 ]
                },
                "stroke": {
                 "type": "string",
                 "description": "Outline colour of the box. Default: `'none'`.",
                 "default": "none"
                },
                "strokeWidth": {
                 "type": "number",
                 "description": "Outline width in pixels. Default: `1`.",
                 "default": 1
                },
                "offset": {
                 "type": "array",
                 "prefixItems": [
                  {
                   "type": "number"
                  },
                  {
                   "type": "number"
                  }
                 ],
                 "minItems": 2,
                 "maxItems": 2,
                 "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
                 "default": [
                  0,
                  0
                 ]
                }
               },
               "additionalProperties": false,
               "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
              },
              "shadow": {
               "anyOf": [
                {
                 "type": "boolean"
                },
                {
                 "type": "object",
                 "properties": {
                  "dx": {
                   "type": "number",
                   "description": "Horizontal shadow offset in pixels. Default: `0`.",
                   "default": 0
                  },
                  "dy": {
                   "type": "number",
                   "description": "Vertical shadow offset in pixels. Default: `1`.",
                   "default": 1
                  },
                  "blur": {
                   "type": "number",
                   "description": "Shadow blur in pixels. Default: `2`.",
                   "default": 2
                  },
                  "color": {
                   "type": "string",
                   "description": "Shadow colour. Default: `'#000000'`.",
                   "default": "#000000"
                  },
                  "opacity": {
                   "type": "number",
                   "description": "Shadow opacity (0 to 1). Default: `0.35`.",
                   "default": 0.35
                  }
                 },
                 "additionalProperties": false
                }
               ],
               "description": "drop shadow on the pill (on the text in halo mode)"
              },
              "raise": {
               "type": "boolean",
               "description": "axis labels sitting on marks are moved above the series (default true)"
              },
              "each": {
               "x-wcc-type": "function",
               "description": "per label: return an override (or 'none') for this one label; called only when set"
              }
             },
             "additionalProperties": false
            }
           ],
           "description": "West Coast Charts: readability of the centre labels (features/readability)"
          },
          "show": {
           "type": "boolean",
           "description": "Shows the middle texts. Default: `false`.",
           "default": false
          },
          "name": {
           "type": "object",
           "properties": {
            "show": {
             "type": "boolean",
             "description": "Shows the name. Default: `true`.",
             "default": true
            },
            "fontSize": {
             "type": "string",
             "description": "Font size of the name. Default: `'16px'`.",
             "default": "16px"
            },
            "fontFamily": {
             "type": "string",
             "description": "Font family of the name."
            },
            "fontWeight": {
             "anyOf": [
              {
               "type": "string"
              },
              {
               "type": "number"
              }
             ],
             "description": "Font weight of the name. Default: `600`.",
             "default": 600
            },
            "color": {
             "type": "string",
             "description": "Colour of the name; not set uses the slice colour."
            },
            "offsetY": {
             "type": "number",
             "description": "Moves the name vertically. Default: `-10`.",
             "default": -10
            },
            "formatter": {
             "x-wcc-type": "function",
             "description": "Function that returns the name text. The built-in one returns the slice name."
            }
           },
           "additionalProperties": false,
           "description": "The upper text: name of the hovered slice."
          },
          "value": {
           "type": "object",
           "properties": {
            "show": {
             "type": "boolean",
             "description": "Shows the value. Default: `true`.",
             "default": true
            },
            "fontSize": {
             "type": "string",
             "description": "Font size of the value. Default: `'20px'`.",
             "default": "20px"
            },
            "fontFamily": {
             "type": "string",
             "description": "Font family of the value."
            },
            "fontWeight": {
             "anyOf": [
              {
               "type": "string"
              },
              {
               "type": "number"
              }
             ],
             "description": "Font weight of the value. Default: `400`.",
             "default": 400
            },
            "color": {
             "type": "string",
             "description": "Colour of the value; not set uses `chart.foreColor`."
            },
            "offsetY": {
             "type": "number",
             "description": "Moves the value vertically. Default: `10`.",
             "default": 10
            },
            "formatter": {
             "x-wcc-type": "function",
             "description": "Function that returns the value text. The built-in one returns the value."
            }
           },
           "additionalProperties": false,
           "description": "The lower text: value of the hovered slice."
          },
          "total": {
           "type": "object",
           "properties": {
            "show": {
             "type": "boolean",
             "description": "Shows the total when nothing is hovered. Default: `false`.",
             "default": false
            },
            "showAlways": {
             "type": "boolean",
             "description": "Keeps the total even while a slice is hovered. Default: `false`.",
             "default": false
            },
            "fontFamily": {
             "type": "string",
             "description": "Font family of the total label."
            },
            "fontWeight": {
             "anyOf": [
              {
               "type": "string"
              },
              {
               "type": "number"
              }
             ],
             "description": "Font weight of the total label. Default: `400`.",
             "default": 400
            },
            "fontSize": {
             "type": "string",
             "description": "Font size of the total label. Default: `'16px'`.",
             "default": "16px"
            },
            "label": {
             "type": "string",
             "description": "Text shown in place of a slice name. Default: `'Total'`.",
             "default": "Total"
            },
            "color": {
             "type": "string",
             "description": "Colour of the total label."
            },
            "formatter": {
             "x-wcc-type": "function",
             "description": "Function that returns the total value text. The built-in one returns the sum of the\nslice values."
            }
           },
           "additionalProperties": false,
           "description": "Total shown while no slice is hovered."
          }
         },
         "additionalProperties": false,
         "description": "Texts in the middle of the donut."
        }
       },
       "additionalProperties": false,
       "description": "Settings of the donut hole."
      }
     },
     "additionalProperties": false,
     "description": "Settings of pie and donut charts."
    },
    "polarArea": {
     "type": "object",
     "properties": {
      "rings": {
       "type": "object",
       "properties": {
        "strokeWidth": {
         "type": "number",
         "description": "Line width of the rings; 0 hides them. Default: `1`.",
         "default": 1
        },
        "strokeColor": {
         "type": "string",
         "description": "Colour of the rings. Default: `'#e8e8e8'`.",
         "default": "#e8e8e8"
        }
       },
       "additionalProperties": false,
       "description": "Concentric guide circles."
      },
      "spokes": {
       "type": "object",
       "properties": {
        "strokeWidth": {
         "type": "number",
         "description": "Line width of the spokes; 0 hides them. Default: `1`.",
         "default": 1
        },
        "connectorColors": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Colour of the spokes (or one per spoke). Default: `'#e8e8e8'`.",
         "default": "#e8e8e8"
        }
       },
       "additionalProperties": false,
       "description": "Lines from the centre to each slice border."
      }
     },
     "additionalProperties": false,
     "description": "Settings of polar area charts."
    },
    "radar": {
     "type": "object",
     "properties": {
      "size": {
       "type": "number",
       "description": "Radius in pixels; not set fits the plot."
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the radar horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the radar vertically. Default: `0`.",
       "default": 0
      },
      "polygons": {
       "type": "object",
       "properties": {
        "strokeColors": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Colour of the polygon lines (or one per ring). Default: `'#e8e8e8'`.",
         "default": "#e8e8e8"
        },
        "strokeWidth": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Width of the polygon lines. Default: `1`.",
         "default": 1
        },
        "connectorColors": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Colour of the lines from the centre to each corner. Default: `'#e8e8e8'`.",
         "default": "#e8e8e8"
        },
        "fill": {
         "type": "object",
         "properties": {
          "colors": {
           "type": "array",
           "items": {
            "type": "string"
           },
           "description": "Fill colours of the rings, repeated in order; not set leaves them empty."
          }
         },
         "additionalProperties": false,
         "description": "Fill between the polygons."
        }
       },
       "additionalProperties": false,
       "description": "The web of guide polygons."
      }
     },
     "additionalProperties": false,
     "description": "Settings of radar charts."
    },
    "radialBar": {
     "type": "object",
     "properties": {
      "inverseOrder": {
       "type": "boolean",
       "description": "Draws the first series on the outside instead of the inside. Default: `false`.",
       "default": false
      },
      "startAngle": {
       "type": "number",
       "description": "Start angle of the bars in degrees (0 = 12 o'clock). Default: `0`.",
       "default": 0
      },
      "endAngle": {
       "type": "number",
       "description": "End angle of the bars in degrees; 360 is a full circle. Default: `360`.",
       "default": 360
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the chart horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the chart vertically. Default: `0`.",
       "default": 0
      },
      "hollow": {
       "type": "object",
       "properties": {
        "margin": {
         "type": "number",
         "description": "Space in pixels between the hollow and the innermost bar. Default: `5`.",
         "default": 5
        },
        "size": {
         "type": "string",
         "description": "Diameter of the hollow as a percentage. Default: `'50%'`.",
         "default": "50%"
        },
        "background": {
         "type": "string",
         "description": "Fill colour of the hollow. Default: `'transparent'`.",
         "default": "transparent"
        },
        "image": {
         "type": "string",
         "description": "URL of an image drawn in the hollow."
        },
        "imageWidth": {
         "type": "number",
         "description": "Width of the image in pixels. Default: `150`.",
         "default": 150
        },
        "imageHeight": {
         "type": "number",
         "description": "Height of the image in pixels. Default: `150`.",
         "default": 150
        },
        "imageOffsetX": {
         "type": "number",
         "description": "Moves the image horizontally. Default: `0`.",
         "default": 0
        },
        "imageOffsetY": {
         "type": "number",
         "description": "Moves the image vertically. Default: `0`.",
         "default": 0
        },
        "imageClipped": {
         "type": "boolean",
         "description": "Clips the image to the circle of the hollow. Default: `true`.",
         "default": true
        },
        "position": {
         "type": "string",
         "enum": [
          "front",
          "back"
         ],
         "description": "'front' draws the hollow above the tracks, 'back' below them. Default: `'front'`.",
         "default": "front"
        },
        "dropShadow": {
         "$ref": "#/$defs/ApexDropShadow",
         "description": "Shadow of the hollow."
        }
       },
       "additionalProperties": false,
       "description": "The empty centre."
      },
      "track": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the tracks. Default: `true`.",
         "default": true
        },
        "startAngle": {
         "type": "number",
         "description": "Start angle of the track; not set uses `radialBar.startAngle`."
        },
        "endAngle": {
         "type": "number",
         "description": "End angle of the track; not set uses `radialBar.endAngle`."
        },
        "background": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Track colour (or one per series). Default: `'#f2f2f2'`.",
         "default": "#f2f2f2"
        },
        "strokeWidth": {
         "type": "string",
         "description": "Track thickness as a percentage of the bar thickness. Default: `'97%'`.",
         "default": "97%"
        },
        "opacity": {
         "type": "number",
         "description": "Track opacity (0 to 1). Default: `1`.",
         "default": 1
        },
        "margin": {
         "type": "number",
         "description": "Space in pixels between neighbouring tracks. Default: `5`.",
         "default": 5
        },
        "dropShadow": {
         "$ref": "#/$defs/ApexDropShadow",
         "description": "Shadow of the tracks."
        }
       },
       "additionalProperties": false,
       "description": "The background ring behind each bar."
      },
      "dataLabels": {
       "type": "object",
       "properties": {
        "readability": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "none",
            "halo",
            "pill",
            "auto",
            "hide"
           ]
          },
          {
           "type": "boolean"
          },
          {
           "type": "object",
           "properties": {
            "mode": {
             "type": "string",
             "enum": [
              "none",
              "halo",
              "pill",
              "auto",
              "hide"
             ],
             "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
            },
            "fallback": {
             "type": "string",
             "enum": [
              "halo",
              "pill",
              "hide"
             ],
             "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
            },
            "enabled": {
             "type": "boolean",
             "description": "false switches the treatment off for this label kind"
            },
            "contrast": {
             "type": "boolean",
             "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
            },
            "minRatio": {
             "type": "number",
             "description": "WCAG 2 contrast ratio to reach. Default 4.5"
            },
            "light": {
             "type": "string",
             "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
            },
            "dark": {
             "type": "string",
             "description": "Dark colour of the pair. Default: `'#111827'`.",
             "default": "#111827"
            },
            "background": {
             "type": "string",
             "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
            },
            "halo": {
             "type": "object",
             "properties": {
              "width": {
               "type": "number",
               "description": "Outline width in pixels. Default: `3`.",
               "default": 3
              },
              "color": {
               "type": "string",
               "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
               "default": "auto"
              },
              "opacity": {
               "type": "number",
               "description": "Outline opacity (0 to 1). Default: `0.92`.",
               "default": 0.92
              },
              "blur": {
               "type": "number",
               "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
               "default": 0
              }
             },
             "additionalProperties": false,
             "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
            },
            "pill": {
             "type": "object",
             "properties": {
              "fill": {
               "type": "string",
               "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
               "default": "auto"
              },
              "opacity": {
               "type": "number",
               "description": "Box opacity (0 to 1). Default: `0.9`.",
               "default": 0.9
              },
              "radius": {
               "type": "number",
               "description": "Corner radius in pixels. Default: `4`.",
               "default": 4
              },
              "padding": {
               "anyOf": [
                {
                 "type": "number"
                },
                {
                 "type": "array",
                 "prefixItems": [
                  {
                   "type": "number"
                  },
                  {
                   "type": "number"
                  }
                 ],
                 "minItems": 2,
                 "maxItems": 2
                }
               ],
               "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
               "default": [
                1,
                4
               ]
              },
              "stroke": {
               "type": "string",
               "description": "Outline colour of the box. Default: `'none'`.",
               "default": "none"
              },
              "strokeWidth": {
               "type": "number",
               "description": "Outline width in pixels. Default: `1`.",
               "default": 1
              },
              "offset": {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 2,
               "maxItems": 2,
               "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
               "default": [
                0,
                0
               ]
              }
             },
             "additionalProperties": false,
             "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
            },
            "shadow": {
             "anyOf": [
              {
               "type": "boolean"
              },
              {
               "type": "object",
               "properties": {
                "dx": {
                 "type": "number",
                 "description": "Horizontal shadow offset in pixels. Default: `0`.",
                 "default": 0
                },
                "dy": {
                 "type": "number",
                 "description": "Vertical shadow offset in pixels. Default: `1`.",
                 "default": 1
                },
                "blur": {
                 "type": "number",
                 "description": "Shadow blur in pixels. Default: `2`.",
                 "default": 2
                },
                "color": {
                 "type": "string",
                 "description": "Shadow colour. Default: `'#000000'`.",
                 "default": "#000000"
                },
                "opacity": {
                 "type": "number",
                 "description": "Shadow opacity (0 to 1). Default: `0.35`.",
                 "default": 0.35
                }
               },
               "additionalProperties": false
              }
             ],
             "description": "drop shadow on the pill (on the text in halo mode)"
            },
            "raise": {
             "type": "boolean",
             "description": "axis labels sitting on marks are moved above the series (default true)"
            },
            "each": {
             "x-wcc-type": "function",
             "description": "per label: return an override (or 'none') for this one label; called only when set"
            }
           },
           "additionalProperties": false
          }
         ],
         "description": "West Coast Charts: readability of the centre labels (features/readability)"
        },
        "show": {
         "type": "boolean",
         "description": "Shows the centre texts. Default: `true`.",
         "default": true
        },
        "name": {
         "type": "object",
         "properties": {
          "show": {
           "type": "boolean",
           "description": "Shows the name. Default: `true`.",
           "default": true
          },
          "fontFamily": {
           "type": "string",
           "description": "Font family of the name."
          },
          "fontWeight": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "number"
            }
           ],
           "description": "Font weight of the name. Default: `600`.",
           "default": 600
          },
          "fontSize": {
           "type": "string",
           "description": "Font size of the name. Default: `'16px'`.",
           "default": "16px"
          },
          "color": {
           "type": "string",
           "description": "Colour of the name; not set uses the series colour."
          },
          "offsetY": {
           "type": "number",
           "description": "Moves the name vertically. Default: `0`.",
           "default": 0
          }
         },
         "additionalProperties": false,
         "description": "Upper text: name of the series."
        },
        "value": {
         "type": "object",
         "properties": {
          "show": {
           "type": "boolean",
           "description": "Shows the value. Default: `true`.",
           "default": true
          },
          "fontFamily": {
           "type": "string",
           "description": "Font family of the value."
          },
          "fontSize": {
           "type": "string",
           "description": "Font size of the value. Default: `'14px'`.",
           "default": "14px"
          },
          "fontWeight": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "number"
            }
           ],
           "description": "Font weight of the value. Default: `400`.",
           "default": 400
          },
          "color": {
           "type": "string",
           "description": "Colour of the value; not set uses `chart.foreColor`."
          },
          "offsetY": {
           "type": "number",
           "description": "Moves the value vertically. Default: `16`.",
           "default": 16
          },
          "formatter": {
           "x-wcc-type": "function",
           "description": "Function that returns the value text. The built-in one appends '%'."
          }
         },
         "additionalProperties": false,
         "description": "Lower text: the value."
        },
        "total": {
         "type": "object",
         "properties": {
          "show": {
           "type": "boolean",
           "description": "Shows the total. Default: `false`.",
           "default": false
          },
          "label": {
           "type": "string",
           "description": "Text shown in place of a series name. Default: `'Total'`.",
           "default": "Total"
          },
          "color": {
           "type": "string",
           "description": "Colour of the total label."
          },
          "fontFamily": {
           "type": "string",
           "description": "Font family of the total label."
          },
          "fontWeight": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "number"
            }
           ],
           "description": "Font weight of the total label. Default: `600`.",
           "default": 600
          },
          "fontSize": {
           "type": "string",
           "description": "Font size of the total label. Default: `'16px'`.",
           "default": "16px"
          },
          "formatter": {
           "x-wcc-type": "function",
           "description": "Function that returns the total value text. The built-in one averages the series values\nand appends '%'."
          }
         },
         "additionalProperties": false,
         "description": "Combined text for several series, shown while none is hovered."
        }
       },
       "additionalProperties": false,
       "description": "Texts in the centre."
      },
      "barLabels": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Shows the bar labels. Default: `false`.",
         "default": false
        },
        "offsetX": {
         "type": "number",
         "description": "Moves the bar labels horizontally. Default: `0`.",
         "default": 0
        },
        "offsetY": {
         "type": "number",
         "description": "Moves the bar labels vertically. Default: `0`.",
         "default": 0
        },
        "useSeriesColors": {
         "type": "boolean",
         "description": "Colours each bar label with its series colour. Default: `true`.",
         "default": true
        },
        "fontFamily": {
         "type": "string",
         "description": "Font family of the bar labels."
        },
        "fontWeight": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Font weight of the bar labels. Default: `600`.",
         "default": 600
        },
        "fontSize": {
         "type": "string",
         "description": "Font size of the bar labels. Default: `'16px'`.",
         "default": "16px"
        },
        "formatter": {
         "x-wcc-type": "function",
         "description": "Function that returns the bar label text. The built-in one returns the series name."
        },
        "onClick": {
         "x-wcc-type": "function",
         "description": "Called when a bar label is clicked."
        }
       },
       "additionalProperties": false,
       "description": "Series names written at the start of each bar."
      },
      "shape": {
       "type": "string",
       "enum": [
        "arc",
        "needle"
       ],
       "description": "'arc' fills the ring up to the value; 'needle' points a needle at it. Default: `'arc'`.",
       "default": "arc"
      },
      "min": {
       "type": "number",
       "description": "Value at the start of the gauge. Default: `0`.",
       "default": 0
      },
      "max": {
       "type": "number",
       "description": "Value at the end of the gauge. Default: `100`.",
       "default": 100
      },
      "bands": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "from": {
          "type": "number",
          "description": "Start value of the band."
         },
         "to": {
          "type": "number",
          "description": "End value of the band."
         },
         "color": {
          "type": "string",
          "description": "Band colour."
         },
         "label": {
          "type": "string",
          "description": "Band name, shown as the band's SVG title and added to the accessible value text."
         }
        },
        "required": [
         "from",
         "to"
        ],
        "additionalProperties": false
       },
       "description": "coloured value ranges along the track"
      },
      "bandsStyle": {
       "type": "object",
       "properties": {
        "strokeWidth": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Band thickness as a share of the track thickness or in pixels. Default: `'40%'`.",
         "default": "40%"
        },
        "gap": {
         "type": "number",
         "description": "px along the arc"
        },
        "hideTrackWhenPresent": {
         "type": "boolean",
         "description": "Hides the background track when bands are defined. Default: `false`.",
         "default": false
        },
        "linecap": {
         "type": "string",
         "enum": [
          "square",
          "butt",
          "round"
         ],
         "description": "Ends of each band: 'butt', 'round' or 'square'. Default: `'butt'`.",
         "default": "butt"
        },
        "align": {
         "type": "string",
         "enum": [
          "center",
          "outer"
         ],
         "description": "'outer' aligns the bands to the outer edge of the track, 'center' centres them"
        }
       },
       "additionalProperties": false,
       "description": "Look of the bands ring."
      },
      "ticks": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the ticks. Default: `false`.",
         "default": false
        },
        "major": {
         "type": "object",
         "properties": {
          "count": {
           "type": "number",
           "description": "Number of major ticks including both ends (at least 2). Default: `11`.",
           "default": 11
          },
          "length": {
           "type": "number",
           "description": "Tick length in pixels. Default: `10`.",
           "default": 10
          },
          "width": {
           "type": "number",
           "description": "Tick width in pixels. Default: `1.5`.",
           "default": 1.5
          },
          "color": {
           "type": "string",
           "description": "Tick colour; not set uses the theme's muted text colour."
          },
          "placement": {
           "type": "string",
           "enum": [
            "center",
            "outside",
            "inside"
           ],
           "description": "'outside' draws the ticks beyond the ring, 'inside' within the hollow, 'center' across the\nmiddle of the ring (labels stay outside). Default: `'outside'`.",
           "default": "outside"
          }
         },
         "additionalProperties": false,
         "description": "Major ticks, carrying the labels."
        },
        "minor": {
         "type": "object",
         "properties": {
          "count": {
           "type": "number",
           "description": "Minor ticks between two neighbouring major ticks. Default: `4`.",
           "default": 4
          },
          "length": {
           "type": "number",
           "description": "Tick length in pixels. Default: `5`.",
           "default": 5
          },
          "width": {
           "type": "number",
           "description": "Tick width in pixels. Default: `1`.",
           "default": 1
          },
          "color": {
           "type": "string",
           "description": "Tick colour; not set uses the theme's muted text colour."
          },
          "placement": {
           "type": "string",
           "enum": [
            "center",
            "outside",
            "inside"
           ],
           "description": "'outside', 'inside' or 'center' (as for the major ticks); not set follows the major ticks."
          }
         },
         "additionalProperties": false,
         "description": "Minor ticks between the major ticks."
        },
        "labels": {
         "type": "object",
         "properties": {
          "show": {
           "type": "boolean",
           "description": "Draws the labels. Default: `true`.",
           "default": true
          },
          "offset": {
           "type": "number",
           "description": "Distance of the labels from the ticks in pixels. Default: `6`.",
           "default": 6
          },
          "fontSize": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "number"
            }
           ],
           "description": "Font size; not set uses the theme size."
          },
          "fontFamily": {
           "type": "string",
           "description": "Font family; not set uses the chart font."
          },
          "fontWeight": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "number"
            }
           ],
           "description": "Font weight. Default: `500`.",
           "default": 500
          },
          "color": {
           "type": "string",
           "description": "Label colour; not set uses the theme's muted text colour."
          },
          "formatter": {
           "x-wcc-type": "function",
           "description": "Returns the label text for a tick value."
          }
         },
         "additionalProperties": false,
         "description": "Value labels at the major ticks."
        }
       },
       "additionalProperties": false,
       "description": "Scale ticks and labels around the ring."
      },
      "needle": {
       "type": "object",
       "properties": {
        "color": {
         "type": "string",
         "description": "Needle colour; not set uses the first series colour."
        },
        "length": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "px or a share of the radius; default clears the inner edge of the ring"
        },
        "baseWidth": {
         "type": "number",
         "description": "Width of the needle at its hub in pixels. Default: `8`.",
         "default": 8
        },
        "tipWidth": {
         "type": "number",
         "description": "Width of the needle tip in pixels. Default: `1.5`.",
         "default": 1.5
        },
        "showValueArc": {
         "type": "boolean",
         "description": "Also fills the ring up to the value. Default: `false`.",
         "default": false
        },
        "offsetY": {
         "type": "number",
         "description": "Vertical shift of the needle hub in pixels. Default: `0`.",
         "default": 0
        },
        "animation": {
         "type": "object",
         "properties": {
          "enabled": {
           "type": "boolean",
           "description": "false moves the needle without animation. Default: `true`.",
           "default": true
          },
          "duration": {
           "type": "number",
           "description": "Duration in milliseconds; not set uses the chart animation speed."
          },
          "easing": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "array",
             "prefixItems": [
              {
               "type": "number"
              },
              {
               "type": "number"
              },
              {
               "type": "number"
              },
              {
               "type": "number"
              }
             ],
             "minItems": 4,
             "maxItems": 4
            },
            {
             "x-wcc-type": "function"
            }
           ],
           "description": "Easing of the needle: a named or registered easing, a function of t (0..1) or cubic-bezier\npoints; not set uses a soft overshoot on the first draw and a cubic ease-out on updates."
          }
         },
         "additionalProperties": false,
         "description": "Needle animation."
        }
       },
       "additionalProperties": false,
       "description": "Needle settings (shape 'needle')."
      }
     },
     "additionalProperties": false,
     "description": "Settings of radial bar (circular progress) charts.\nGauge settings (chart.type 'gauge')."
    },
    "funnel": {
     "type": "object",
     "properties": {
      "shape": {
       "type": "string",
       "enum": [
        "rectangle",
        "trapezoid"
       ],
       "description": "'rectangle' draws each stage as a bar; 'trapezoid' joins the stages into slanted segments.\nDefault: `'rectangle'`.",
       "default": "rectangle"
      },
      "lastShape": {
       "type": "string",
       "enum": [
        "flat",
        "taper"
       ],
       "description": "Shape of the last stage: 'flat' or 'taper' (narrows to a point). Default: `'flat'`.",
       "default": "flat"
      }
     },
     "additionalProperties": false,
     "description": "Settings of funnel and pyramid charts."
    },
    "waterfall": {
     "type": "object",
     "properties": {
      "colors": {
       "type": "object",
       "properties": {
        "positive": {
         "type": "string",
         "description": "Colour of increases. Default: `'#00A86F'`.",
         "default": "#00A86F"
        },
        "negative": {
         "type": "string",
         "description": "Colour of decreases. Default: `'#FF4560'`.",
         "default": "#FF4560"
        },
        "subtotal": {
         "type": "string",
         "description": "Colour of subtotal bars (`isSubtotal` data points); not set uses the theme colour."
        },
        "total": {
         "type": "string",
         "description": "Colour of total bars (`isTotal` data points); not set uses the theme colour."
        }
       },
       "additionalProperties": false,
       "description": "Colours of the bar kinds."
      },
      "connectors": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the connectors. Default: `true`.",
         "default": true
        },
        "color": {
         "type": "string",
         "description": "Connector colour; not set uses the theme colour."
        },
        "strokeWidth": {
         "type": "number",
         "description": "Connector width in pixels. Default: `1`.",
         "default": 1
        },
        "strokeDashArray": {
         "type": "number",
         "description": "Dash length of the connectors; 0 is solid. Default: `3`.",
         "default": 3
        }
       },
       "additionalProperties": false,
       "description": "Lines joining the end of one bar to the start of the next."
      }
     },
     "additionalProperties": false,
     "description": "Settings of waterfall charts."
    },
    "sunburst": {
     "type": "object",
     "properties": {
      "offsetX": {
       "type": "number",
       "description": "Horizontal shift of the sunburst in pixels. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Vertical shift of the sunburst in pixels. Default: `0`.",
       "default": 0
      },
      "startAngle": {
       "type": "number",
       "description": "Angle in degrees where the rings begin. Default: `0`.",
       "default": 0
      },
      "endAngle": {
       "type": "number",
       "description": "Angle in degrees where the rings end. Default: `360`.",
       "default": 360
      },
      "innerSize": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Size of the empty centre: a percentage of the radius or pixels. Default: `'15%'`.",
       "default": "15%"
      },
      "borderRadius": {
       "type": "number",
       "description": "Corner radius of the arcs in pixels. Default: `0`.",
       "default": 0
      },
      "spacing": {
       "type": "number",
       "description": "Gap between arcs in pixels. Default: `1`.",
       "default": 1
      },
      "leaf": {
       "type": "string",
       "enum": [
        "extend",
        "stop"
       ],
       "description": "'extend' stretches leaf arcs to the outer ring; 'stop' keeps them one ring deep. Default:\n`'extend'`.",
       "default": "extend"
      },
      "partition": {
       "type": "string",
       "enum": [
        "normalize",
        "strict"
       ],
       "description": "'normalize' sizes a parent by the sum of its children; 'strict' uses the parent's own value\nwhen it has one. Default: `'normalize'`.",
       "default": "normalize"
      },
      "tint": {
       "type": "number",
       "description": "How much deeper levels are lightened from their branch colour (0 to 1). Default: `0.14`.",
       "default": 0.14
      },
      "colorBy": {
       "type": "string",
       "enum": [
        "branch",
        "name"
       ],
       "description": "'branch' gives each top-level branch a palette colour; 'name' colours nodes by their name.\nDefault: `'branch'`.",
       "default": "branch"
      },
      "zoomOnClick": {
       "type": "boolean",
       "description": "Clicking an arc zooms into that branch. Default: `true`.",
       "default": true
      },
      "dataLabels": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the labels. Default: `true`.",
         "default": true
        },
        "showValue": {
         "type": "boolean",
         "description": "Adds the value under the name where there is room (sunburst default: true; icicle: false)."
        },
        "style": {
         "$ref": "#/$defs/WccTextStyle",
         "description": "Text style (fontSize default '12px', fontWeight 500)."
        },
        "minAngleToShow": {
         "type": "number",
         "description": "Arcs narrower than this many degrees get no label. Default: `8`.",
         "default": 8
        }
       },
       "additionalProperties": false,
       "description": "Labels on the arcs."
      }
     },
     "additionalProperties": false,
     "description": "Settings of sunburst charts (nested rings from series data with children)."
    },
    "icicle": {
     "type": "object",
     "properties": {
      "direction": {
       "type": "string",
       "enum": [
        "right",
        "left",
        "down",
        "up"
       ],
       "description": "Direction the levels grow from the root: 'down', 'up', 'right' or 'left'. Default: `'down'`.",
       "default": "down"
      },
      "levelSize": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Thickness of a level: 'equal' splits the space evenly; a pixel value or percentage fixes it.\nDefault: `'equal'`.",
       "default": "equal"
      },
      "maxDepth": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Number of levels shown at once; 'auto' shows all. Default: `'auto'`.",
       "default": "auto"
      },
      "spacing": {
       "type": "number",
       "description": "Gap between cells in pixels. Default: `1`.",
       "default": 1
      },
      "borderRadius": {
       "type": "number",
       "description": "Corner radius of the cells in pixels. Default: `0`.",
       "default": 0
      },
      "leaf": {
       "type": "string",
       "enum": [
        "extend",
        "stop"
       ],
       "description": "'extend' stretches leaf cells to the last level; 'stop' keeps them one level deep. Default:\n`'stop'`.",
       "default": "stop"
      },
      "partition": {
       "type": "string",
       "enum": [
        "normalize",
        "strict"
       ],
       "description": "'normalize' sizes a parent by the sum of its children; 'strict' uses the parent's own value\nwhen it has one. Default: `'normalize'`.",
       "default": "normalize"
      },
      "sort": {
       "type": "string",
       "enum": [
        "none",
        "name",
        "value"
       ],
       "description": "Order of siblings: 'none' keeps the data order, 'value' sorts largest first, 'name'\nalphabetically. Default: `'none'`.",
       "default": "none"
      },
      "tint": {
       "type": "number",
       "description": "How much deeper levels are lightened from their branch colour (0 to 1). Default: `0`.",
       "default": 0
      },
      "colorBy": {
       "type": "string",
       "enum": [
        "branch",
        "name"
       ],
       "description": "'branch' gives each top-level node a palette colour; 'name' colours nodes by their name.\nDefault: `'branch'`.",
       "default": "branch"
      },
      "zoomOnClick": {
       "type": "boolean",
       "description": "Clicking a cell zooms into that branch. Default: `true`.",
       "default": true
      },
      "zoomType": {
       "type": "string",
       "enum": [
        "value",
        "both"
       ],
       "description": "'value' rescales only the value axis on zoom; 'both' also rescales the levels. Default:\n`'value'`.",
       "default": "value"
      },
      "dataLabels": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the labels. Default: `true`.",
         "default": true
        },
        "showValue": {
         "type": "boolean",
         "description": "Adds the value under the name where there is room (sunburst default: true; icicle: false)."
        },
        "style": {
         "$ref": "#/$defs/WccTextStyle",
         "description": "Text style (fontSize default '12px', fontWeight 500)."
        },
        "minSizeToShow": {
         "type": "number",
         "description": "Cells smaller than this many pixels get no label. Default: `30`.",
         "default": 30
        },
        "align": {
         "type": "string",
         "description": "Alignment of the label inside its cell. Default: `'center'`.",
         "default": "center"
        },
        "rotate": {
         "type": "string",
         "enum": [
          "auto",
          "always",
          "never"
         ],
         "description": "'auto' rotates labels when that fits better, 'always' always, 'never' never. Default: `'auto'`.",
         "default": "auto"
        }
       },
       "additionalProperties": false,
       "description": "Labels in the cells."
      }
     },
     "additionalProperties": false,
     "description": "Settings of icicle charts (hierarchy drawn as stacked bands)."
    },
    "unit": {
     "type": "object",
     "properties": {
      "layout": {
       "type": "string",
       "enum": [
        "scatter",
        "arc",
        "grouped",
        "packed",
        "columns",
        "grid",
        "custom"
       ],
       "description": "How marks are arranged: 'grouped' (one cluster per category), 'packed', 'columns', 'grid',\n'scatter', 'arc' or 'custom'. Default: `'grouped'`.",
       "default": "grouped"
      },
      "positions": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "x-wcc-type": "function"
        },
        {
         "$ref": "#/$defs/WccUnitShape"
        }
       ],
       "description": "custom layouts: fn(objects, rect), a registered layout name or a unit shape"
      },
      "scatter": {
       "type": "object",
       "properties": {
        "y": {
         "type": "string",
         "enum": [
          "value",
          "lanes"
         ],
         "description": "`'lanes'` puts one lane per category with a 1-D value axis; `'value'` reads x and y from the data (2-D). Default: `'lanes'`.",
         "default": "lanes"
        },
        "orientation": {
         "type": "string",
         "enum": [
          "horizontal",
          "vertical"
         ],
         "description": "Lanes only: `'vertical'` turns the lanes into columns with the value axis running up. Default: `'horizontal'`.",
         "default": "horizontal"
        },
        "spread": {
         "type": "string",
         "enum": [
          "swarm",
          "jitter"
         ],
         "description": "Lanes only: how marks spread across the lane, `'swarm'` (no overlap) or `'jitter'` (fixed pseudo-random offset). Default: `'swarm'`.",
         "default": "swarm"
        },
        "xTitle": {
         "type": "string",
         "description": "Title of the x (value) axis."
        },
        "yTitle": {
         "type": "string",
         "description": "Title of the y axis (`y: 'value'`)."
        },
        "xFormatter": {
         "x-wcc-type": "function",
         "description": "Formats the x tick labels."
        },
        "yFormatter": {
         "x-wcc-type": "function",
         "description": "Formats the y tick labels (`y: 'value'`)."
        },
        "xMin": {
         "type": "number",
         "description": "Lower end of the x axis; not set uses the data minimum."
        },
        "xMax": {
         "type": "number",
         "description": "Upper end of the x axis; not set uses the data maximum."
        },
        "yMin": {
         "type": "number",
         "description": "Lower end of the y axis (`y: 'value'`)."
        },
        "yMax": {
         "type": "number",
         "description": "Upper end of the y axis (`y: 'value'`)."
        },
        "tickAmount": {
         "type": "number",
         "description": "Number of x ticks."
        },
        "yTickAmount": {
         "type": "number",
         "description": "Number of y ticks (`y: 'value'`)."
        },
        "laneLabelWidth": {
         "type": "number",
         "description": "Width of the lane label column in pixels."
        },
        "gridlines": {
         "type": "boolean",
         "description": "Draws the gridlines. Default: `true`.",
         "default": true
        },
        "sizeField": {
         "type": "string",
         "description": "Data field that sizes the marks (bubble scatter). Default: `'z'`.",
         "default": "z"
        },
        "sizeRange": {
         "type": "array",
         "prefixItems": [
          {
           "type": "number"
          },
          {
           "type": "number"
          }
         ],
         "minItems": 2,
         "maxItems": 2,
         "description": "Smallest and largest mark radius in pixels for `sizeField`."
        }
       },
       "additionalProperties": false,
       "description": "Settings of the 'scatter' layout."
      },
      "transition": {
       "type": "string",
       "enum": [
        "group",
        "flow",
        "identity"
       ],
       "description": "How marks are matched between updates: 'group', 'flow' or 'identity'. Default: `'group'`.",
       "default": "group"
      },
      "shape": {
       "type": "string",
       "enum": [
        "circle",
        "square",
        "image",
        "pictogram"
       ],
       "description": "Shape of a mark: 'circle', 'square', 'image' or 'pictogram'. Default: `'circle'`.",
       "default": "circle"
      },
      "image": {
       "type": "object",
       "properties": {
        "src": {
         "type": "string",
         "description": "Image URL."
        },
        "width": {
         "type": "number",
         "description": "Image width in pixels; not set fits the mark."
        },
        "height": {
         "type": "number",
         "description": "Image height in pixels; not set fits the mark."
        },
        "tint": {
         "type": "boolean",
         "description": "Tints the image with the series colour. Default: `false`.",
         "default": false
        }
       },
       "additionalProperties": false,
       "description": "Image used when `shape` is 'image'."
      },
      "pictogram": {
       "type": "object",
       "properties": {
        "mark": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "object",
           "properties": {
            "name": {
             "type": "string"
            }
           },
           "required": [
            "name"
           ],
           "additionalProperties": false
          },
          {
           "type": "object",
           "properties": {
            "path": {
             "type": "string"
            },
            "viewBox": {
             "anyOf": [
              {
               "type": "string"
              },
              {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                },
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 4,
               "maxItems": 4
              }
             ]
            }
           },
           "required": [
            "path"
           ],
           "additionalProperties": true
          },
          {
           "type": "array",
           "items": {
            "anyOf": [
             {
              "type": "string"
             },
             {
              "type": "object",
              "properties": {
               "name": {
                "type": "string"
               }
              },
              "required": [
               "name"
              ],
              "additionalProperties": false
             },
             {
              "type": "object",
              "properties": {
               "path": {
                "type": "string"
               },
               "viewBox": {
                "anyOf": [
                 {
                  "type": "string"
                 },
                 {
                  "type": "array",
                  "prefixItems": [
                   {
                    "type": "number"
                   },
                   {
                    "type": "number"
                   },
                   {
                    "type": "number"
                   },
                   {
                    "type": "number"
                   }
                  ],
                  "minItems": 4,
                  "maxItems": 4
                 }
                ]
               }
              },
              "required": [
               "path"
              ],
              "additionalProperties": true
             }
            ]
           }
          }
         ],
         "description": "Icon: a built-in name, an own SVG path `{ path, viewBox }` (viewBox as string or 4 numbers,\ndefault `[0, 0, 24, 24]`), or an array whose first entry is used. An unknown name falls\nback to `fallback`."
        },
        "fit": {
         "type": "string",
         "description": "How the icon fits its box: 'contain', 'cover', 'width' or 'height'. Default: `'contain'`.",
         "default": "contain"
        },
        "scale": {
         "type": "number",
         "description": "Size factor of the icon. Default: `1`.",
         "default": 1
        },
        "padding": {
         "type": "number",
         "description": "Space around the icon. Default: `0`.",
         "default": 0
        },
        "fallback": {
         "type": "string",
         "description": "Shape drawn when the icon is not available: 'circle' or 'square'. Default: `'circle'`.",
         "default": "circle"
        },
        "outline": {
         "type": "boolean",
         "description": "Draws the icon as an outline instead of filled. Default: `false`.",
         "default": false
        },
        "outlineWidth": {
         "type": "number",
         "description": "Outline width in screen pixels. Default: `1.5`.",
         "default": 1.5
        }
       },
       "additionalProperties": false,
       "description": "Icon used when `shape` is 'pictogram'."
      },
      "size": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Mark radius in pixels; 'auto' fits the marks to the space. Default: `'auto'`.",
       "default": "auto"
      },
      "columns": {
       "type": "object",
       "properties": {
        "size": {
         "anyOf": [
          {
           "const": "inherit"
          },
          {
           "type": "number"
          }
         ],
         "description": "Fixed mark size in the columns; 'inherit' uses `unit.size`. Default: `'inherit'`.",
         "default": "inherit"
        }
       },
       "additionalProperties": false,
       "description": "Settings of the 'columns' layout."
      },
      "grid": {
       "type": "object",
       "properties": {
        "columns": {
         "type": "number",
         "description": "Cells per row. Default: `10`.",
         "default": 10
        },
        "total": {
         "type": "number",
         "description": "Total number of cells; empty cells are drawn in the track colour."
        },
        "fillFrom": {
         "type": "string",
         "description": "Edge the grid fills from: 'bottom' or 'top'. Default: `'bottom'`.",
         "default": "bottom"
        },
        "split": {
         "type": "boolean",
         "description": "Draws one small waffle per category instead of one shared grid. Default: `false`.",
         "default": false
        },
        "tileColumns": {
         "type": "number",
         "description": "Number of small waffles per row when `split` is on; not set chooses automatically."
        },
        "max": {
         "type": "number",
         "description": "Value that fills a whole small waffle when `split` is on."
        },
        "trackColor": {
         "type": "string",
         "description": "Colour of empty cells; not set uses the theme track colour."
        }
       },
       "additionalProperties": false,
       "description": "Settings of the 'grid' (waffle) layout."
      },
      "arc": {
       "type": "object",
       "properties": {
        "startAngle": {
         "type": "number",
         "description": "Start angle in degrees. Default: `-90`.",
         "default": -90
        },
        "endAngle": {
         "type": "number",
         "description": "End angle in degrees. Default: `90`.",
         "default": 90
        },
        "innerRadiusRatio": {
         "type": "number",
         "description": "Inner radius as a share of the outer radius, clamped to 0.05 to 0.95. Default: `0.4`.",
         "default": 0.4
        },
        "rows": {
         "anyOf": [
          {
           "const": "auto"
          },
          {
           "type": "number"
          }
         ],
         "description": "Number of rows; 'auto' picks one. Default: `'auto'`.",
         "default": "auto"
        }
       },
       "additionalProperties": false,
       "description": "Settings of the 'arc' (parliament) layout."
      },
      "gather": {
       "type": "object",
       "properties": {
        "easing": {
         "type": "string",
         "description": "Easing of the tween ('outCubic', 'outBack' or another named easing); a custom easing switches 'auto' motion to a tween. Default: `'outCubic'`.",
         "default": "outCubic"
        },
        "overshoot": {
         "type": "number",
         "description": "Overshoot of the 'outBack' easing. Default: `1.70158`.",
         "default": 1.70158
        },
        "enter": {
         "type": "string",
         "description": "How new marks appear: 'burst' (from the cluster centre), 'rise' (from below) or 'fade'. Default: `'burst'`.",
         "default": "burst"
        },
        "motion": {
         "type": "string",
         "description": "'spring', 'tween' or 'auto' (spring unless a custom easing is set). Default: `'auto'`.",
         "default": "auto"
        },
        "spring": {
         "type": "string",
         "description": "Spring preset: 'crisp', 'gentle' or 'snappy'. Default: `'crisp'`.",
         "default": "crisp"
        }
       },
       "additionalProperties": false,
       "description": "Animation of marks moving to their new place on updates."
      },
      "sizeByValue": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Turns value-based sizing on. Default: `false`.",
         "default": false
        },
        "maxRadius": {
         "anyOf": [
          {
           "const": "auto"
          },
          {
           "type": "number"
          }
         ],
         "description": "Radius of the largest mark in pixels; 'auto' fits the space. Default: `'auto'`.",
         "default": "auto"
        },
        "minRadius": {
         "type": "number",
         "description": "Radius of the smallest mark in pixels."
        },
        "scale": {
         "type": "string",
         "description": "'area' makes the mark area proportional to the value. Default: `'area'`.",
         "default": "area"
        }
       },
       "additionalProperties": false,
       "description": "Sizes each mark by its own value instead of drawing equal marks."
      },
      "spacing": {
       "type": "number",
       "description": "Distance between mark centres as a multiple of the mark size. Default: `1.05`.",
       "default": 1.05
      },
      "borderRadius": {
       "type": "number",
       "description": "Corner radius of square marks."
      },
      "unitValue": {
       "type": "number",
       "description": "how much one unit stands for"
      },
      "maxUnits": {
       "type": "number",
       "description": "Upper limit of marks; above it the counts are scaled down proportionally. Default: `5000`.",
       "default": 5000
      },
      "sortByGroup": {
       "type": "boolean",
       "description": "Keeps marks of the same category together. Default: `true`.",
       "default": true
      },
      "clusterLabels": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Shows the labels; not set shows them for the grouped, columns and split-grid layouts."
        },
        "position": {
         "type": "string",
         "description": "Where the label sits; not set is 'bottom' for the columns layout and 'top' otherwise."
        },
        "curved": {
         "type": "boolean",
         "description": "Bends the label along the cluster edge. Default: `false`.",
         "default": false
        },
        "color": {
         "type": "string",
         "description": "Label colour; not set uses the theme text colour."
        },
        "offsetY": {
         "type": "number",
         "description": "Vertical shift of the labels in pixels. Default: `0`.",
         "default": 0
        },
        "formatter": {
         "x-wcc-type": "function",
         "description": "Returns the label text for a cluster."
        },
        "fontSize": {
         "type": "string",
         "description": "Font size of the labels. Default: `'12px'`.",
         "default": "12px"
        },
        "fontFamily": {
         "type": "string",
         "description": "Font family; not set uses the chart font."
        },
        "fontWeight": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Font weight of the labels. Default: `600`.",
         "default": 600
        },
        "external": {
         "type": "object",
         "properties": {
          "show": {
           "type": "boolean",
           "description": "Moves the labels outside. Default: `false`.",
           "default": false
          },
          "offsetX": {
           "type": "number",
           "description": "Horizontal shift of the external labels in pixels. Default: `0`.",
           "default": 0
          },
          "offsetY": {
           "type": "number",
           "description": "Vertical shift of the external labels in pixels. Default: `0`.",
           "default": 0
          },
          "connector": {
           "type": "object",
           "properties": {
            "show": {
             "type": "boolean",
             "description": "Draws the connector. Default: `true`.",
             "default": true
            },
            "width": {
             "type": "number",
             "description": "Connector width in pixels. Default: `1`.",
             "default": 1
            },
            "color": {
             "type": "string",
             "description": "Connector colour; not set uses the theme colour."
            },
            "gap": {
             "type": "number",
             "description": "Gap between the cluster and the connector in pixels. Default: `4`.",
             "default": 4
            },
            "length": {
             "type": "number",
             "description": "Connector length in pixels. Default: `16`.",
             "default": 16
            }
           },
           "additionalProperties": false,
           "description": "Line from the cluster to its external label."
          }
         },
         "additionalProperties": false,
         "description": "Labels placed outside the clusters with a connector line."
        }
       },
       "additionalProperties": false,
       "description": "Labels naming each cluster of marks."
      },
      "tooltip": {
       "type": "object",
       "properties": {
        "formatter": {
         "x-wcc-type": "function",
         "description": "Returns the tooltip content for a hovered mark."
        }
       },
       "additionalProperties": false,
       "description": "Tooltip of the unit chart."
      }
     },
     "additionalProperties": false,
     "description": "Settings of unit (waffle) charts: one mark per unit of value."
    },
    "streamgraph": {
     "type": "object",
     "properties": {
      "offset": {
       "type": "string",
       "enum": [
        "wiggle",
        "silhouette",
        "zero",
        "expand"
       ],
       "description": "Baseline of the stack: 'wiggle', 'silhouette' (centred), 'zero' or 'expand' (normalised to\nthe full height). Default: `'wiggle'`.",
       "default": "wiggle"
      },
      "order": {
       "type": "string",
       "enum": [
        "none",
        "inside-out",
        "inverse"
       ],
       "description": "Stacking order: 'inside-out', 'inverse' or 'none' (series order). Default: `'inside-out'`.",
       "default": "inside-out"
      },
      "hover": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Dims the other layers on hover. Default: `true`.",
         "default": true
        },
        "opacity": {
         "type": "number",
         "description": "Opacity of the dimmed layers. Default: `0.35`.",
         "default": 0.35
        }
       },
       "additionalProperties": false,
       "description": "Dimming of the other layers while one is hovered."
      },
      "labels": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the labels. Default: `true`.",
         "default": true
        },
        "minWidth": {
         "type": "number",
         "description": "Layers narrower than this many pixels get no label. Default: `24`.",
         "default": 24
        },
        "minFontSize": {
         "type": "number",
         "description": "Smallest automatic font size in pixels. Default: `9`.",
         "default": 9
        },
        "maxFontSize": {
         "type": "number",
         "description": "Largest automatic font size in pixels. Default: `30`.",
         "default": 30
        },
        "style": {
         "type": "object",
         "properties": {
          "fontSize": {
           "type": "string",
           "description": "Font size; 'auto' scales it with the layer thickness. Default: `'auto'`.",
           "default": "auto"
          },
          "fontFamily": {
           "type": "string",
           "description": "Font family; not set uses the chart font."
          },
          "fontWeight": {
           "anyOf": [
            {
             "type": "string"
            },
            {
             "type": "number"
            }
           ],
           "description": "Font weight. Default: `600`.",
           "default": 600
          },
          "colors": {
           "type": "array",
           "items": {
            "type": "string"
           },
           "description": "Label colours, one per series; not set picks a contrasting colour."
          }
         },
         "additionalProperties": false,
         "description": "Text style of the labels."
        }
       },
       "additionalProperties": false,
       "description": "Series names drawn inside the layers."
      }
     },
     "additionalProperties": false,
     "description": "Settings of streamgraphs (stacked areas around a moving baseline)."
    },
    "calendar": {
     "type": "object",
     "properties": {
      "weekStart": {
       "type": "number",
       "description": "0 = Sunday ... 6 = Saturday"
      },
      "start": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "x-wcc-type": "Date"
        }
       ],
       "description": "First day shown ('YYYY-MM-DD', Date or timestamp); not set uses the first data day."
      },
      "end": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "x-wcc-type": "Date"
        }
       ],
       "description": "Last day shown; not set uses the last data day."
      },
      "aggregate": {
       "type": "string",
       "enum": [
        "last",
        "sum",
        "max",
        "min",
        "mean"
       ],
       "description": "several values on one day"
      },
      "dayLabels": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "all",
          "alternate"
         ]
        },
        {
         "const": false
        }
       ],
       "description": "Weekday labels: 'alternate' (every second day), 'all', or false for none. Default:\n`'alternate'`.",
       "default": "alternate"
      },
      "dayNames": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "7 names, starting with Sunday"
      },
      "monthNames": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Twelve month names, January first; not set uses the locale."
      },
      "emptyColor": {
       "type": "string",
       "description": "Colour of days in range without a value; not set uses the theme."
      },
      "color": {
       "type": "string",
       "description": "Base colour of the day cells."
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Formats the value shown for a day."
      }
     },
     "additionalProperties": false,
     "description": "Settings of calendar heatmaps."
    },
    "barRace": {
     "type": "object",
     "properties": {
      "maxBars": {
       "type": "number",
       "description": "Number of bars shown; the rest wait below the cut. Default: `10`.",
       "default": 10
      },
      "sort": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ],
       "description": "'desc' puts the largest value on top; 'asc' the smallest. Default: `'desc'`.",
       "default": "desc"
      },
      "nulls": {
       "type": "string",
       "enum": [
        "hide",
        "dash"
       ],
       "description": "'dash' keeps a row without a value and shows `values.nullLabel`; 'hide' drops it. Default:\n`'dash'`.",
       "default": "dash"
      },
      "speed": {
       "type": "number",
       "description": "ms per update"
      },
      "colors": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       ],
       "description": "Palette name or colour list for the bars; not set uses the theme colours."
      },
      "labels": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the names. Default: `true`.",
         "default": true
        },
        "fontSize": {
         "type": "number",
         "description": "Font size of the names in pixels. Default: `12.5`.",
         "default": 12.5
        }
       },
       "additionalProperties": false,
       "description": "Names beside the bars."
      },
      "values": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the values. Default: `true`.",
         "default": true
        },
        "fontSize": {
         "type": "number",
         "description": "Font size of the values in pixels."
        },
        "decimals": {
         "type": "number",
         "description": "Fixed number of decimals; not set uses the locale's compact notation."
        },
        "formatter": {
         "x-wcc-type": "function",
         "description": "Returns the value text."
        },
        "nullLabel": {
         "type": "string",
         "description": "Text of a row without a value. Default: `'–'`.",
         "default": "–"
        }
       },
       "additionalProperties": false,
       "description": "Values at the end of the bars."
      },
      "ticker": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the ticker. Default: `true`.",
         "default": true
        },
        "text": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "Ticker text, or a function of `{ w }` (the chart's internal state) that returns it; not set shows the current period."
        },
        "fontSize": {
         "type": "number",
         "description": "Font size of the ticker in pixels."
        },
        "color": {
         "type": "string",
         "description": "Ticker colour."
        },
        "opacity": {
         "type": "number",
         "description": "Ticker opacity. Default: `0.55`.",
         "default": 0.55
        }
       },
       "additionalProperties": false,
       "description": "Large period label in the background."
      },
      "cut": {
       "type": "object",
       "properties": {
        "show": {
         "anyOf": [
          {
           "const": "auto"
          },
          {
           "type": "boolean"
          }
         ],
         "description": "'auto' draws it when names wait below; true always; false never. Default: `'auto'`.",
         "default": "auto"
        },
        "label": {
         "anyOf": [
          {
           "const": false
          },
          {
           "type": "string"
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "Cut text: a string, a function of `{ shown, total }` (bars drawn, names in the race: the\nframe's `meta.total`, else its data length), or false for none; not set shows 'Top N of M'."
        },
        "color": {
         "type": "string",
         "description": "Colour of the cut line."
        }
       },
       "additionalProperties": false,
       "description": "Line under the last shown bar when more names wait below it."
      }
     },
     "additionalProperties": false,
     "description": "Settings of bar race charts."
    },
    "slope": {
     "type": "object",
     "properties": {
      "colorBy": {
       "type": "string",
       "enum": [
        "series",
        "direction"
       ],
       "description": "'series' colours lines by series; 'direction' by up, down or flat. Default: `'series'`.",
       "default": "series"
      },
      "upColor": {
       "type": "string",
       "description": "Colour of rising lines with `colorBy: 'direction'`. Default: `'#16a34a'`.",
       "default": "#16a34a"
      },
      "downColor": {
       "type": "string",
       "description": "Colour of falling lines with `colorBy: 'direction'`. Default: `'#dc2626'`.",
       "default": "#dc2626"
      },
      "flatColor": {
       "type": "string",
       "description": "Colour of flat lines with `colorBy: 'direction'`. Default: `'#94a3b8'`.",
       "default": "#94a3b8"
      },
      "flatThreshold": {
       "type": "number",
       "description": "|last - first| / |first| below this counts as flat"
      },
      "highlight": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "series names drawn in colour; the others are muted"
      },
      "mutedColor": {
       "type": "string",
       "description": "Colour of series not listed in `highlight`; not set uses a neutral grey for the mode."
      },
      "labels": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the labels. Default: `true`.",
         "default": true
        },
        "left": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "name",
            "value",
            "both"
           ]
          },
          {
           "const": false
          }
         ],
         "description": "Left label content: 'value', 'name', 'both' or false. Default: `'value'`.",
         "default": "value"
        },
        "right": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "name",
            "value",
            "both"
           ]
          },
          {
           "const": false
          }
         ],
         "description": "Right label content: 'value', 'name', 'both' or false. Default: `'both'`.",
         "default": "both"
        },
        "fontSize": {
         "type": "number",
         "description": "Font size in pixels. Default: `12`.",
         "default": 12
        },
        "minGap": {
         "type": "number",
         "description": "Minimum vertical gap between labels in pixels. Default: `0`.",
         "default": 0
        },
        "formatter": {
         "x-wcc-type": "function",
         "description": "Formats the label value."
        }
       },
       "additionalProperties": false,
       "description": "Labels at both ends of the lines."
      },
      "periods": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the period names. Default: `true`.",
         "default": true
        },
        "fontSize": {
         "type": "number",
         "description": "Font size in pixels. Default: `12`.",
         "default": 12
        }
       },
       "additionalProperties": false,
       "description": "Period names above the two axes."
      },
      "hover": {
       "type": "object",
       "properties": {
        "opacity": {
         "type": "number",
         "description": "Opacity of the dimmed lines. Default: `0.22`.",
         "default": 0.22
        }
       },
       "additionalProperties": false,
       "description": "Dimming of the other lines while one is hovered."
      }
     },
     "additionalProperties": false,
     "description": "Settings of slope charts."
    },
    "beeswarm": {
     "type": "object",
     "properties": {
      "size": {
       "type": "number",
       "description": "Dot radius in pixels; dots shrink towards `minSize` when a swarm is too wide. Default: `3.5`.",
       "default": 3.5
      },
      "minSize": {
       "type": "number",
       "description": "Smallest dot radius in pixels. Default: `1.5`.",
       "default": 1.5
      },
      "padding": {
       "type": "number",
       "description": "Gap between dots in pixels. Default: `1`.",
       "default": 1
      },
      "width": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Width of a swarm as a share of the category slot or in pixels. Default: `'88%'`.",
       "default": "88%"
      },
      "side": {
       "type": "string",
       "enum": [
        "top",
        "right",
        "bottom",
        "left",
        "both"
       ],
       "description": "Side the dots spread to: 'both', 'left', 'right', 'top' or 'bottom'. Default: `'both'`.",
       "default": "both"
      },
      "maxPoints": {
       "type": "number",
       "description": "Dots per category; above it the samples are thinned evenly. Default: `2000`.",
       "default": 2000
      },
      "opacity": {
       "type": "number",
       "description": "Dot opacity. Default: `0.92`.",
       "default": 0.92
      },
      "strokeWidth": {
       "type": "number",
       "description": "Dot outline width; not set uses min(1, 0.3 × radius)."
      },
      "strokeColor": {
       "type": "string",
       "description": "Dot outline colour; '#fff' follows the surface colour in dark mode. Default: `'#fff'`.",
       "default": "#fff"
      },
      "colorScale": {
       "$ref": "#/$defs/WccColorScale",
       "description": "Colours the dots by value instead of by series."
      },
      "median": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the median line. Default: `true`.",
         "default": true
        },
        "color": {
         "type": "string",
         "description": "Colour of the median line."
        },
        "strokeWidth": {
         "type": "number",
         "description": "Width of the median line in pixels. Default: `1.75`.",
         "default": 1.75
        }
       },
       "additionalProperties": false,
       "description": "Median line of each swarm."
      }
     },
     "additionalProperties": false,
     "description": "Settings of beeswarm charts."
    },
    "violin": {
     "type": "object",
     "properties": {
      "bandwidthScale": {
       "type": "number",
       "description": "Factor applied to the automatic kernel bandwidth; larger values give smoother shapes.\nDefault: `1`.",
       "default": 1
      },
      "kde": {
       "type": "object",
       "properties": {
        "bandwidth": {
         "type": "number",
         "description": "Fixed kernel bandwidth in data units; not set is estimated from the samples."
        },
        "resolution": {
         "type": "number",
         "description": "Number of points along each violin outline. Default: `64`.",
         "default": 64
        }
       },
       "additionalProperties": false,
       "description": "Kernel density estimate settings."
      },
      "normalize": {
       "type": "string",
       "enum": [
        "group",
        "individual"
       ],
       "description": "'individual' scales each violin to its own peak; 'group' to the largest peak of all. Default:\n`'individual'`.",
       "default": "individual"
      },
      "side": {
       "type": "string",
       "enum": [
        "top",
        "right",
        "bottom",
        "left",
        "both"
       ],
       "description": "Side drawn: 'both' (full violin), 'left', 'right', 'top' or 'bottom' (half violins). Default:\n`'both'`.",
       "default": "both"
      },
      "box": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the inner box. Default: `false`.",
         "default": false
        },
        "width": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Box width as a share of the violin or in pixels. Default: `'15%'`.",
         "default": "15%"
        },
        "whiskers": {
         "type": "string",
         "enum": [
          "minmax",
          "tukey",
          "percentile"
         ],
         "description": "Whisker rule: 'minmax', 'tukey' (1.5 × IQR) or 'percentile'. Default: `'minmax'`.",
         "default": "minmax"
        },
        "strokeWidth": {
         "type": "number",
         "description": "Outline width of the box in pixels. Default: `1`.",
         "default": 1
        },
        "fillColor": {
         "type": "string",
         "description": "Fill colour of the box."
        },
        "capWidth": {
         "type": "number",
         "description": "Width of the whisker caps as a share of the box width. Default: `0.5`.",
         "default": 0.5
        }
       },
       "additionalProperties": false,
       "description": "Box plot drawn inside the violin."
      },
      "points": {
       "type": "object",
       "properties": {
        "show": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "all",
            "outliers"
           ]
          },
          {
           "type": "boolean"
          }
         ],
         "description": "false: none; true or 'all': every sample; 'outliers': only those outside the whiskers"
        },
        "shape": {
         "type": "string",
         "enum": [
          "circle",
          "square"
         ],
         "description": "Point shape: 'circle' or 'square'. Default: `'circle'`.",
         "default": "circle"
        },
        "size": {
         "type": "number",
         "description": "Point radius in pixels. Default: `2.5`.",
         "default": 2.5
        },
        "jitter": {
         "type": "number",
         "description": "0..1 of the lane width"
        },
        "maxPoints": {
         "type": "number",
         "description": "Upper limit of drawn points; above it the samples are thinned. Default: `3000`.",
         "default": 3000
        },
        "opacity": {
         "type": "number",
         "description": "Point opacity. Default: `0.9`.",
         "default": 0.9
        },
        "fillColor": {
         "type": "string",
         "description": "'series-dark' | 'series' | a colour"
        },
        "strokeColor": {
         "type": "string",
         "description": "Point outline colour. Default: `'#fff'`.",
         "default": "#fff"
        },
        "strokeWidth": {
         "type": "number",
         "description": "Point outline width in pixels. Default: `1`.",
         "default": 1
        },
        "colorScale": {
         "$ref": "#/$defs/WccColorScale",
         "description": "Colours the points by value instead of by series (violin default: 24 steps)."
        },
        "constrainToViolin": {
         "type": "boolean",
         "description": "Keeps the jittered points inside the violin outline. Default: `true`.",
         "default": true
        },
        "position": {
         "type": "string",
         "enum": [
          "top",
          "right",
          "bottom",
          "left",
          "center"
         ],
         "description": "Where the points lane sits: 'center', 'left', 'right', 'top' or 'bottom'. Default: `'center'`.",
         "default": "center"
        },
        "laneWidth": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Width of the points lane as a share of the violin or in pixels. Default: `'40%'`.",
         "default": "40%"
        }
       },
       "additionalProperties": false,
       "description": "Raw samples drawn over the violins."
      }
     },
     "additionalProperties": false,
     "description": "Settings of violin charts."
    },
    "histogram": {
     "type": "object",
     "properties": {
      "bins": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "type": "array",
         "items": {
          "type": "number"
         }
        }
       ],
       "description": "Bin count, or a rule: 'auto' (the larger count of Freedman–Diaconis and Sturges), 'sturges',\n'rice', 'sqrt', 'scott' or 'fd'. Default: `'auto'`.",
       "default": "auto"
      },
      "binWidth": {
       "type": "number",
       "description": "Fixed bin width in data units; overrides `bins`."
      },
      "range": {
       "type": "array",
       "prefixItems": [
        {
         "type": "number"
        },
        {
         "type": "number"
        }
       ],
       "minItems": 2,
       "maxItems": 2,
       "description": "[min, max] of the binned range; not set uses the data extent."
      },
      "normalize": {
       "type": "string",
       "enum": [
        "count",
        "relative",
        "density"
       ],
       "description": "Bar height: 'count', 'relative' (percent of the series) or 'density' (count / (n × bin\nwidth)). Default: `'count'`.",
       "default": "count"
      },
      "cumulative": {
       "type": "boolean",
       "description": "Each bar adds up all bins before it. Default: `false`.",
       "default": false
      },
      "overlap": {
       "type": "boolean",
       "description": "With several series, true draws the bars at 55% fill opacity without outline; false keeps\nthem opaque with a 1 px outline. Default: `true`.",
       "default": true
      },
      "niceEdges": {
       "type": "boolean",
       "description": "round rule-based bin widths to 1/2/2.5/5 steps and align the edges to them"
      }
     },
     "additionalProperties": false,
     "description": "Settings of histograms (raw values binned into bars)."
    },
    "sankey": {
     "$ref": "#/$defs/WccSankeyOptions",
     "x-wcc-license": "premium"
    },
    "chord": {
     "$ref": "#/$defs/WccChordOptions",
     "x-wcc-license": "premium"
    },
    "gantt": {
     "$ref": "#/$defs/WccGanttOptions",
     "x-wcc-license": "premium"
    },
    "tree": {
     "$ref": "#/$defs/WccTreeOptions",
     "x-wcc-license": "premium"
    },
    "stock": {
     "$ref": "#/$defs/WccStockOptions",
     "x-wcc-license": "premium"
    },
    "map": {
     "$ref": "#/$defs/WccMapOptions",
     "x-wcc-license": "premium"
    },
    "marimekko": {
     "$ref": "#/$defs/WccMarimekkoOptions",
     "x-wcc-license": "premium"
    },
    "network": {
     "$ref": "#/$defs/WccNetworkOptions",
     "x-wcc-license": "premium"
    },
    "radialColumn": {
     "type": "object",
     "properties": {
      "readabilityWarnings": {
       "type": "boolean",
       "description": "Warn once if inner rings are thinner than 8 px or heat cells below 2 px per slot. No values/layers are removed. Default: `true`.",
       "default": true
      },
      "aggregate": {
       "type": "string",
       "enum": [
        "none",
        "sum",
        "max",
        "min",
        "mean"
       ],
       "description": "how the column values combine in the centre, the generated description, tooltip footers and the filter note.\n'sum' (default) adds them into a Total — right for counts and amounts only. Use 'max' / 'min' for\nlatencies and percentiles ('Highest p95 latency (ms): 412 (Matching · 20:00)'), 'mean' for rates,\npercentages and scores, 'none' to name no combined number at all."
      },
      "link": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "none",
          "auto",
          "map",
          "category",
          "angle"
         ]
        },
        {
         "$ref": "#/$defs/RadialColumnLink"
        }
       ],
       "description": "links between inner layers and the column ring (a mode string or options)"
      },
      "encode": {
       "$ref": "#/$defs/RadialColumnEncode",
       "description": "bind colour / delta / length to separate metrics"
      },
      "markers": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "at": {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ],
          "description": "Slot of the mark: category index or name."
         },
         "label": {
          "type": "string",
          "description": "Text of the tooltip row."
         },
         "kind": {
          "type": "string",
          "description": "Name of the tooltip row. Default: `'Event'`.",
          "default": "Event"
         },
         "color": {
          "type": "string",
          "description": "Mark colour; not set uses the text colour."
         },
         "shape": {
          "type": "string",
          "enum": [
           "diamond",
           "dot"
          ],
          "description": "`'dot'` or `'diamond'`. Default: `'diamond'`.",
          "default": "diamond"
         }
        },
        "required": [
         "at"
        ],
        "additionalProperties": false
       },
       "description": "rim marks (deploys, pipeline runs, incidents): a small glyph outside the bars at a slot, a tooltip row on that slot and a guide row"
      },
      "startAngle": {
       "type": "number",
       "description": "degrees, 0 = 12 o'clock, clockwise; a partial range gives a gauge"
      },
      "endAngle": {
       "type": "number",
       "description": "End of the range in degrees (same convention as `startAngle`). Default: `360`.",
       "default": 360
      },
      "innerRadius": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "base radius of the bars: 'auto', px, '40%' or a fraction of the outer radius"
      },
      "barPadding": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "gap between neighbouring slots: 'auto' or a fraction of the slot (0..0.9)"
      },
      "groupPadding": {
       "type": "number",
       "description": "gap between the bars of one slot when grouped (fraction)"
      },
      "stacked": {
       "type": "boolean",
       "description": "stack series outward (falls back to chart.stacked)"
      },
      "stackGap": {
       "type": "number",
       "description": "Gap between stacked segments in px. Default: `1`.",
       "default": 1
      },
      "rounded": {
       "type": "boolean",
       "description": "rounded bar ends"
      },
      "fill": {
       "type": "object",
       "properties": {
        "type": {
         "type": "string",
         "enum": [
          "auto",
          "series",
          "value",
          "spectrum"
         ],
         "description": "auto: spectrum for one uncoloured series, else series colours"
        },
        "stops": {
         "type": "array",
         "items": {
          "type": "string"
         },
         "description": "gradient stops (spectrum by angle, value by magnitude)"
        },
        "ranges": {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "from": {
            "type": "number",
            "description": "Lowest value of the range (inclusive)."
           },
           "to": {
            "type": "number",
            "description": "Highest value of the range (inclusive)."
           },
           "color": {
            "type": "string",
            "description": "Colour of bars in the range."
           }
          },
          "required": [
           "from",
           "to",
           "color"
          ],
          "additionalProperties": false
         },
         "description": "type 'value': fixed colours for value ranges (inclusive); values outside every range use the stops"
        },
        "fade": {
         "type": "number",
         "description": "inner fade of the bars, 0..1 (0 = off)"
        }
       },
       "additionalProperties": false,
       "description": "Bar colours."
      },
      "track": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Shows the track. Default: `false`.",
         "default": false
        },
        "color": {
         "type": "string",
         "description": "Track colour; not set uses a faint text tone."
        }
       },
       "additionalProperties": false,
       "description": "Background track behind the bars."
      },
      "baseline": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the ring at value 0. Default: `true`.",
         "default": true
        }
       },
       "additionalProperties": false,
       "description": "Zero ring."
      },
      "valueAxis": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "`false` hides the grid rings and value labels. Default: `true`.",
         "default": true
        },
        "min": {
         "type": "number",
         "description": "Fixed lower end; not set uses the data."
        },
        "max": {
         "type": "number",
         "description": "Fixed upper end; not set uses the data."
        },
        "tickAmount": {
         "type": "number",
         "description": "Target number of tick steps. Default: `4`.",
         "default": 4
        },
        "nice": {
         "type": "boolean",
         "description": "round free ends to the tightest whole tick step (3-6 ticks); false = data extent. Default true"
        },
        "rings": {
         "type": "boolean",
         "description": "Draws the grid rings at the ticks (the value labels sit on them). Default: `true`.",
         "default": true
        },
        "labels": {
         "type": "object",
         "properties": {
          "show": {
           "type": "boolean",
           "description": "Shows the tick labels. Default: `true`.",
           "default": true
          },
          "formatter": {
           "x-wcc-type": "function",
           "description": "`(value, { w }) => string`; not set uses a compact number."
          },
          "readability": {
           "anyOf": [
            {
             "type": "string",
             "enum": [
              "none",
              "halo",
              "pill",
              "auto",
              "hide"
             ]
            },
            {
             "type": "boolean"
            },
            {
             "type": "object",
             "properties": {
              "mode": {
               "type": "string",
               "enum": [
                "none",
                "halo",
                "pill",
                "auto",
                "hide"
               ],
               "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
              },
              "fallback": {
               "type": "string",
               "enum": [
                "halo",
                "pill",
                "hide"
               ],
               "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
              },
              "enabled": {
               "type": "boolean",
               "description": "false switches the treatment off for this label kind"
              },
              "contrast": {
               "type": "boolean",
               "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
              },
              "minRatio": {
               "type": "number",
               "description": "WCAG 2 contrast ratio to reach. Default 4.5"
              },
              "light": {
               "type": "string",
               "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
              },
              "dark": {
               "type": "string",
               "description": "Dark colour of the pair. Default: `'#111827'`.",
               "default": "#111827"
              },
              "background": {
               "type": "string",
               "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
              },
              "halo": {
               "type": "object",
               "properties": {
                "width": {
                 "type": "number",
                 "description": "Outline width in pixels. Default: `3`.",
                 "default": 3
                },
                "color": {
                 "type": "string",
                 "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
                 "default": "auto"
                },
                "opacity": {
                 "type": "number",
                 "description": "Outline opacity (0 to 1). Default: `0.92`.",
                 "default": 0.92
                },
                "blur": {
                 "type": "number",
                 "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
                 "default": 0
                }
               },
               "additionalProperties": false,
               "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
              },
              "pill": {
               "type": "object",
               "properties": {
                "fill": {
                 "type": "string",
                 "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
                 "default": "auto"
                },
                "opacity": {
                 "type": "number",
                 "description": "Box opacity (0 to 1). Default: `0.9`.",
                 "default": 0.9
                },
                "radius": {
                 "type": "number",
                 "description": "Corner radius in pixels. Default: `4`.",
                 "default": 4
                },
                "padding": {
                 "anyOf": [
                  {
                   "type": "number"
                  },
                  {
                   "type": "array",
                   "prefixItems": [
                    {
                     "type": "number"
                    },
                    {
                     "type": "number"
                    }
                   ],
                   "minItems": 2,
                   "maxItems": 2
                  }
                 ],
                 "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
                 "default": [
                  1,
                  4
                 ]
                },
                "stroke": {
                 "type": "string",
                 "description": "Outline colour of the box. Default: `'none'`.",
                 "default": "none"
                },
                "strokeWidth": {
                 "type": "number",
                 "description": "Outline width in pixels. Default: `1`.",
                 "default": 1
                },
                "offset": {
                 "type": "array",
                 "prefixItems": [
                  {
                   "type": "number"
                  },
                  {
                   "type": "number"
                  }
                 ],
                 "minItems": 2,
                 "maxItems": 2,
                 "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
                 "default": [
                  0,
                  0
                 ]
                }
               },
               "additionalProperties": false,
               "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
              },
              "shadow": {
               "anyOf": [
                {
                 "type": "boolean"
                },
                {
                 "type": "object",
                 "properties": {
                  "dx": {
                   "type": "number",
                   "description": "Horizontal shadow offset in pixels. Default: `0`.",
                   "default": 0
                  },
                  "dy": {
                   "type": "number",
                   "description": "Vertical shadow offset in pixels. Default: `1`.",
                   "default": 1
                  },
                  "blur": {
                   "type": "number",
                   "description": "Shadow blur in pixels. Default: `2`.",
                   "default": 2
                  },
                  "color": {
                   "type": "string",
                   "description": "Shadow colour. Default: `'#000000'`.",
                   "default": "#000000"
                  },
                  "opacity": {
                   "type": "number",
                   "description": "Shadow opacity (0 to 1). Default: `0.35`.",
                   "default": 0.35
                  }
                 },
                 "additionalProperties": false
                }
               ],
               "description": "drop shadow on the pill (on the text in halo mode)"
              },
              "raise": {
               "type": "boolean",
               "description": "axis labels sitting on marks are moved above the series (default true)"
              },
              "each": {
               "x-wcc-type": "function",
               "description": "per label: return an override (or 'none') for this one label; called only when set"
              }
             },
             "additionalProperties": false
            }
           ],
           "description": "labels that sit on bars: 'auto' (default) = untouched off the bars, contrasting colour over one fill, pill over mixed fills; 'none' = off. Layered over chart.readability"
          },
          "angle": {
           "anyOf": [
            {
             "const": "auto"
            },
            {
             "type": "number"
            }
           ],
           "description": "where the scale sits: degrees (startAngle convention, 0 = 12 o'clock) or 'auto' = the slot boundary with the shortest bars on both sides. Default: the start of the range"
          },
          "pinAngle": {
           "type": "boolean",
           "description": "'auto' keeps the first angle it found across updates (no jumping scale). Default true"
          }
         },
         "additionalProperties": false,
         "description": "Tick labels of the value scale."
        }
       },
       "additionalProperties": false,
       "description": "Value scale of the bars."
      },
      "categoryLabels": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Shows the category names. Default: `true`.",
         "default": true
        },
        "orientation": {
         "type": "string",
         "enum": [
          "auto",
          "horizontal",
          "radial"
         ],
         "description": "`'horizontal'` or along the `'radial'` direction; `'auto'` keeps names horizontal when they\nfit their slot. Default: `'auto'`.",
         "default": "auto"
        },
        "offset": {
         "type": "number",
         "description": "Distance from the bars in px. Default: `8`.",
         "default": 8
        },
        "maxWidth": {
         "type": "number",
         "description": "Longest name in px before it is shortened. Default: `110`.",
         "default": 110
        },
        "step": {
         "type": "number",
         "description": "label every n-th category (disables automatic thinning)"
        },
        "maxCount": {
         "type": "number",
         "description": "most labels to show; default from the ring length (one per ~4 font sizes, 4-24)"
        },
        "formatter": {
         "x-wcc-type": "function",
         "description": "`(category, { index }) => string` for the name."
        }
       },
       "additionalProperties": false,
       "description": "Category names around the ring."
      },
      "center": {
       "type": "object",
       "properties": {
        "readability": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "none",
            "halo",
            "pill",
            "auto",
            "hide"
           ]
          },
          {
           "type": "boolean"
          },
          {
           "type": "object",
           "properties": {
            "mode": {
             "type": "string",
             "enum": [
              "none",
              "halo",
              "pill",
              "auto",
              "hide"
             ],
             "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
            },
            "fallback": {
             "type": "string",
             "enum": [
              "halo",
              "pill",
              "hide"
             ],
             "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
            },
            "enabled": {
             "type": "boolean",
             "description": "false switches the treatment off for this label kind"
            },
            "contrast": {
             "type": "boolean",
             "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
            },
            "minRatio": {
             "type": "number",
             "description": "WCAG 2 contrast ratio to reach. Default 4.5"
            },
            "light": {
             "type": "string",
             "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
            },
            "dark": {
             "type": "string",
             "description": "Dark colour of the pair. Default: `'#111827'`.",
             "default": "#111827"
            },
            "background": {
             "type": "string",
             "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
            },
            "halo": {
             "type": "object",
             "properties": {
              "width": {
               "type": "number",
               "description": "Outline width in pixels. Default: `3`.",
               "default": 3
              },
              "color": {
               "type": "string",
               "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
               "default": "auto"
              },
              "opacity": {
               "type": "number",
               "description": "Outline opacity (0 to 1). Default: `0.92`.",
               "default": 0.92
              },
              "blur": {
               "type": "number",
               "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
               "default": 0
              }
             },
             "additionalProperties": false,
             "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
            },
            "pill": {
             "type": "object",
             "properties": {
              "fill": {
               "type": "string",
               "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
               "default": "auto"
              },
              "opacity": {
               "type": "number",
               "description": "Box opacity (0 to 1). Default: `0.9`.",
               "default": 0.9
              },
              "radius": {
               "type": "number",
               "description": "Corner radius in pixels. Default: `4`.",
               "default": 4
              },
              "padding": {
               "anyOf": [
                {
                 "type": "number"
                },
                {
                 "type": "array",
                 "prefixItems": [
                  {
                   "type": "number"
                  },
                  {
                   "type": "number"
                  }
                 ],
                 "minItems": 2,
                 "maxItems": 2
                }
               ],
               "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
               "default": [
                1,
                4
               ]
              },
              "stroke": {
               "type": "string",
               "description": "Outline colour of the box. Default: `'none'`.",
               "default": "none"
              },
              "strokeWidth": {
               "type": "number",
               "description": "Outline width in pixels. Default: `1`.",
               "default": 1
              },
              "offset": {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 2,
               "maxItems": 2,
               "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
               "default": [
                0,
                0
               ]
              }
             },
             "additionalProperties": false,
             "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
            },
            "shadow": {
             "anyOf": [
              {
               "type": "boolean"
              },
              {
               "type": "object",
               "properties": {
                "dx": {
                 "type": "number",
                 "description": "Horizontal shadow offset in pixels. Default: `0`.",
                 "default": 0
                },
                "dy": {
                 "type": "number",
                 "description": "Vertical shadow offset in pixels. Default: `1`.",
                 "default": 1
                },
                "blur": {
                 "type": "number",
                 "description": "Shadow blur in pixels. Default: `2`.",
                 "default": 2
                },
                "color": {
                 "type": "string",
                 "description": "Shadow colour. Default: `'#000000'`.",
                 "default": "#000000"
                },
                "opacity": {
                 "type": "number",
                 "description": "Shadow opacity (0 to 1). Default: `0.35`.",
                 "default": 0.35
                }
               },
               "additionalProperties": false
              }
             ],
             "description": "drop shadow on the pill (on the text in halo mode)"
            },
            "raise": {
             "type": "boolean",
             "description": "axis labels sitting on marks are moved above the series (default true)"
            },
            "each": {
             "x-wcc-type": "function",
             "description": "per label: return an override (or 'none') for this one label; called only when set"
            }
           },
           "additionalProperties": false
          }
         ],
         "description": "centre value + label readability (explicit modes; default none)"
        },
        "show": {
         "anyOf": [
          {
           "const": "auto"
          },
          {
           "type": "boolean"
          }
         ],
         "description": "`true` always shows the centre; `'auto'` shows it when the hole is at least 34 px. Default:\n`'auto'`.",
         "default": "auto"
        },
        "label": {
         "type": "string",
         "description": "Label under the value; not set uses the gauge layer name, `'Total'` with columns, or the\nfirst layer name."
        },
        "value": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "Fixed value or text, or a function returning text; not set uses the gauge value or the\ntotal."
        },
        "formatter": {
         "x-wcc-type": "function",
         "description": "`(value, { w }) => string` for a numeric centre value."
        },
        "hover": {
         "type": "boolean",
         "description": "show the hovered slot / segment in the centre"
        }
       },
       "additionalProperties": false,
       "description": "Value and label in the hole."
      },
      "layers": {
       "type": "array",
       "items": {
        "$ref": "#/$defs/RadialColumnLayer"
       },
       "description": "Inner layers, innermost first. Default: `[]`.",
       "default": []
      },
      "layerGap": {
       "type": "number",
       "description": "px between the outermost inner layer and the column ring"
      },
      "hole": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "radius of the empty centre: 'auto', px, '%' or fraction of the space inside the column ring"
      },
      "legend": {
       "type": "object",
       "properties": {
        "show": {
         "anyOf": [
          {
           "const": "auto"
          },
          {
           "type": "boolean"
          }
         ],
         "description": "`true` always shows it; `'auto'` from two items. Default: `'auto'`.",
         "default": "auto"
        },
        "position": {
         "type": "string",
         "enum": [
          "auto",
          "right",
          "bottom"
         ],
         "description": "`'right'` or `'bottom'`; `'auto'` uses the right on wide plots. Default: `'auto'`.",
         "default": "auto"
        }
       },
       "additionalProperties": false,
       "description": "Legend of series and layer items."
      },
      "plugins": {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "$ref": "#/$defs/WccPremiumPlugin"
         },
         {
          "type": "array",
          "prefixItems": [
           {
            "anyOf": [
             {
              "type": "string"
             },
             {
              "$ref": "#/$defs/WccPremiumPlugin"
             }
            ]
           },
           {
            "type": "object",
            "additionalProperties": true
           }
          ],
          "minItems": 1,
          "maxItems": 2
         }
        ]
       },
       "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
      }
     },
     "additionalProperties": false,
     "x-wcc-license": "premium"
    },
    "quint": {
     "$ref": "#/$defs/WccQuintOptions",
     "description": "quintTimeline and quintConvergence (premium type module west-coast-charts/layers/quint).",
     "x-wcc-license": "premium"
    },
    "vitalsClock": {
     "$ref": "#/$defs/WccVitalsClockOptions",
     "description": "chart.type 'vitalsClock' (premium type module west-coast-charts/layers/vitals; docs/guide/medical.md).",
     "x-wcc-license": "premium"
    },
    "schedule": {
     "$ref": "#/$defs/WccScheduleOptions",
     "description": "chart.type 'schedule' (premium type module west-coast-charts/layers/schedule; docs/guide/medical.md).",
     "x-wcc-license": "premium"
    }
   },
   "additionalProperties": false,
   "description": "Settings that belong to one chart type, grouped by type name."
  },
  "responsive": {
   "type": "array",
   "items": {
    "$ref": "#/$defs/ApexResponsive"
   },
   "description": "Option overrides that apply below given container widths. Default: `[]`.",
   "default": []
  },
  "series": {
   "anyOf": [
    {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "name": {
        "type": "string",
        "description": "Series name shown in the legend, the tooltip and the accessible data table."
       },
       "type": {
        "type": "string",
        "description": "Chart type of this series in a combined chart (for example 'column' next to 'line'); not set\nuses `chart.type`."
       },
       "color": {
        "type": "string",
        "description": "Colour of this series; overrides the palette entry at its index."
       },
       "group": {
        "type": "string",
        "description": "Stack name for stacked bar/column charts: series with the same group form one stack, different\ngroups stand side by side."
       },
       "hidden": {
        "type": "boolean",
        "description": "Starts the series hidden, as if switched off in the legend."
       },
       "zIndex": {
        "type": "number",
        "description": "Drawing order of line and area series; higher numbers are drawn on top."
       },
       "data": {
        "anyOf": [
         {
          "type": "array",
          "items": {
           "type": "array",
           "items": {
            "type": "number"
           }
          }
         },
         {
          "type": "array",
          "items": {
           "anyOf": [
            {
             "type": "null"
            },
            {
             "type": "number"
            }
           ]
          }
         },
         {
          "type": "array",
          "items": {
           "type": "object",
           "properties": {
            "x": {
             "description": "The x value: category text, number or timestamp/date string, depending on `xaxis.type`."
            },
            "y": {
             "description": "The y value; ranges and candlesticks take an array."
            },
            "fill": {
             "$ref": "#/$defs/ApexFill",
             "description": "Fill of this single point (bar, area of a range), merged over `fill`."
            },
            "fillColor": {
             "type": "string",
             "description": "Colour of this single point."
            },
            "strokeColor": {
             "type": "string",
             "description": "Outline colour of this single point."
            },
            "meta": {
             "description": "Any extra data; not drawn, but available to formatters and event callbacks."
            },
            "goals": {
             "type": "array",
             "items": {
              "type": "object",
              "properties": {
               "name": {
                "type": "string",
                "description": "Name of the goal, shown in the tooltip and legend."
               },
               "value": {
                "type": "number",
                "description": "Value at which the goal marker is drawn."
               },
               "strokeHeight": {
                "type": "number",
                "description": "Thickness of the marker for vertical bars, in pixels."
               },
               "strokeWidth": {
                "type": "number",
                "description": "Thickness of the marker for horizontal bars, in pixels."
               },
               "strokeColor": {
                "type": "string",
                "description": "Colour of the goal marker."
               },
               "strokeDashArray": {
                "type": "number",
                "description": "Dash length of the goal marker; 0 draws a solid line."
               },
               "strokeLineCap": {
                "type": "string",
                "enum": [
                 "square",
                 "butt",
                 "round"
                ],
                "description": "Line ends of the goal marker."
               }
              },
              "required": [
               "value"
              ],
              "additionalProperties": false
             },
             "description": "Target markers drawn across a bar or column at the given values."
            },
            "barHeightOffset": {
             "type": "number",
             "description": "Pixels added to the height of this horizontal bar (centred)."
            },
            "columnWidthOffset": {
             "type": "number",
             "description": "Pixels added to the width of this column (centred)."
            }
           },
           "required": [
            "x",
            "y"
           ],
           "additionalProperties": false
          }
         },
         {
          "type": "array",
          "items": {
           "type": "object",
           "properties": {
            "x": {
             "description": "The x value: category text, number or timestamp/date string, depending on `xaxis.type`."
            },
            "points": {
             "type": "array",
             "items": {
              "type": "number"
             },
             "description": "Raw samples of a box plot point; quartiles and whiskers are computed from them."
            },
            "fillColor": {
             "type": "string",
             "description": "Colour of this single point."
            },
            "meta": {
             "description": "Any extra data; not drawn, but available to formatters and event callbacks."
            }
           },
           "required": [
            "x",
            "points"
           ],
           "additionalProperties": false
          }
         },
         {
          "type": "array",
          "items": {
           "type": "array",
           "prefixItems": [
            {
             "type": "number"
            },
            {
             "anyOf": [
              {
               "type": "null"
              },
              {
               "type": "number"
              }
             ]
            }
           ],
           "minItems": 2,
           "maxItems": 2
          }
         },
         {
          "type": "array",
          "items": {
           "type": "array",
           "prefixItems": [
            {
             "type": "number"
            },
            {
             "type": "array",
             "items": {
              "anyOf": [
               {
                "type": "null"
               },
               {
                "type": "number"
               }
              ]
             }
            }
           ],
           "minItems": 2,
           "maxItems": 2
          }
         }
        ],
        "description": "The values: plain numbers (with `xaxis.categories`), `{ x, y }` objects, `[x, y]` pairs, or\nper-type shapes such as `[x, [o, h, l, c]]` for candlesticks."
       }
      },
      "required": [
       "data"
      ],
      "additionalProperties": false
     }
    },
    {
     "type": "array",
     "items": {
      "type": "number"
     }
    },
    {
     "type": "array",
     "items": {
      "$ref": "#/$defs/WccSeries"
     }
    }
   ],
   "description": "The data. Axis charts take an array of series objects; pie, donut, polar area and radial bar\ntake an array of numbers."
  },
  "states": {
   "$ref": "#/$defs/ApexStates",
   "description": "Visual change of a data point when hovered or selected."
  },
  "stroke": {
   "$ref": "#/$defs/ApexStroke",
   "description": "Lines of line/area series and the outlines of bars and slices."
  },
  "subtitle": {
   "$ref": "#/$defs/ApexTitleSubtitle",
   "description": "Second title line under `title`."
  },
  "theme": {
   "$ref": "#/$defs/ApexTheme",
   "description": "Light/dark mode, colour palette and monochrome colouring."
  },
  "title": {
   "$ref": "#/$defs/ApexTitleSubtitle",
   "description": "Chart title."
  },
  "tooltip": {
   "$ref": "#/$defs/ApexTooltip",
   "description": "The box shown when hovering data points."
  },
  "xaxis": {
   "$ref": "#/$defs/ApexXAxis",
   "description": "The horizontal axis (for horizontal bar charts: the value axis)."
  },
  "yaxis": {
   "anyOf": [
    {
     "$ref": "#/$defs/ApexYAxis"
    },
    {
     "type": "array",
     "items": {
      "$ref": "#/$defs/ApexYAxis"
     }
    }
   ],
   "description": "The vertical axis; an array defines several y axes."
  },
  "wcc": {
   "type": "object",
   "properties": {
    "a11y": {
     "type": "object",
     "properties": {
      "dataTable": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "hidden",
          "details"
         ]
        },
        {
         "type": "boolean"
        }
       ],
       "description": "'hidden' (default): screen-reader table; true | 'details': visible disclosure; false: none"
      },
      "dataTableMaxRows": {
       "type": "number",
       "description": "Maximum number of rows in the data table. Default: `500`.",
       "default": 500
      },
      "strings": {
       "type": "object",
       "additionalProperties": true,
       "description": "override any announcement / description string"
      }
     },
     "additionalProperties": false,
     "description": "Accessibility extras: the data table and custom strings."
    },
    "performance": {
     "type": "object",
     "properties": {
      "decimate": {
       "type": "boolean",
       "description": "M4 decimation of plain line/area paths; pixel-identical, default true"
      },
      "denseMarks": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "boolean"
        }
       ],
       "description": "one union path per series for columns / scatter points; default 'auto'"
      },
      "denseThreshold": {
       "type": "number",
       "description": "point count from which denseMarks applies; default 2000"
      }
     },
     "additionalProperties": false,
     "description": "large-data rendering, see docs/architecture/performance.md"
    },
    "narrative": {
     "$ref": "#/$defs/WccNarrativeOptions",
     "description": "Settings of the narrative (guided tour) feature."
    }
   },
   "additionalProperties": false,
   "description": "West Coast Charts extensions"
  },
  "drilldown": {
   "$ref": "#/$defs/WccDrilldownOptions",
   "description": "drilldown feature"
  },
  "highlightFilter": {
   "$ref": "#/$defs/WccHighlightFilterOptions",
   "description": "highlight-filter feature"
  },
  "trellis": {
   "$ref": "#/$defs/WccTrellisOptions",
   "description": "trellis feature (small multiples)"
  }
 },
 "additionalProperties": false,
 "x-wcc-premium-types": [
  "sankey",
  "chord",
  "gantt",
  "tree",
  "stock",
  "map",
  "marimekko",
  "network",
  "radialColumn",
  "quintTimeline",
  "quintConvergence",
  "vitalsClock",
  "schedule"
 ],
 "$defs": {
  "AnnotationLabel": {
   "type": "object",
   "properties": {
    "borderColor": {
     "type": "string",
     "description": "Border colour of the label box. Default: `'#c2c2c2'`.",
     "default": "#c2c2c2"
    },
    "borderWidth": {
     "type": "number",
     "description": "Border width of the label box in pixels. Default: `1`.",
     "default": 1
    },
    "borderRadius": {
     "type": "number",
     "description": "Corner radius of the label box in pixels. Default: `2`.",
     "default": 2
    },
    "text": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "array",
       "items": {
        "type": "string"
       }
      }
     ],
     "description": "Label text; without text no label is drawn."
    },
    "textAnchor": {
     "type": "string",
     "description": "Horizontal anchor of the text: 'start', 'middle' or 'end'. Default: `'middle'` on x-axis annotations, `'end'` on y-axis annotations.",
     "default": "middle"
    },
    "offsetX": {
     "type": "number",
     "description": "Horizontal shift of the label in pixels. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Vertical shift of the label in pixels. Default: `0`.",
     "default": 0
    },
    "style": {
     "$ref": "#/$defs/AnnotationStyle",
     "description": "Text and box style of the label."
    },
    "position": {
     "type": "string",
     "description": "Where the label sits along the line: 'top', 'center' or 'bottom' on x-axis annotations; 'left',\n'center' or 'right' on y-axis annotations. Default: `'top'` on x-axis annotations, `'right'` on y-axis annotations.",
     "default": "top"
    },
    "orientation": {
     "type": "string",
     "description": "'vertical' rotates an x-axis annotation label along the line; 'horizontal' keeps it level.\nDefault: `'vertical'`.",
     "default": "vertical"
    },
    "mouseEnter": {
     "x-wcc-type": "Function",
     "description": "Called with the annotation object when the pointer enters the label."
    },
    "mouseLeave": {
     "x-wcc-type": "Function",
     "description": "Called with the annotation object when the pointer leaves the label."
    },
    "click": {
     "x-wcc-type": "Function",
     "description": "Called with the annotation object when the label is clicked."
    }
   },
   "additionalProperties": false
  },
  "AnnotationStyle": {
   "type": "object",
   "properties": {
    "background": {
     "type": "string",
     "description": "Fill colour of the label box. Default: `'#fff'`.",
     "default": "#fff"
    },
    "color": {
     "type": "string",
     "description": "Text colour of the label."
    },
    "fontFamily": {
     "type": "string",
     "description": "Font family of the label; not set uses the chart font."
    },
    "fontWeight": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Font weight of the label. Default: `400`.",
     "default": 400
    },
    "fontSize": {
     "type": "string",
     "description": "Font size of the label. Default: `'11px'`.",
     "default": "11px"
    },
    "cssClass": {
     "type": "string",
     "description": "Extra CSS class added to the label text. Default: `''`.",
     "default": ""
    },
    "padding": {
     "type": "object",
     "properties": {
      "left": {
       "type": "number",
       "description": "Left padding in pixels. Default: `5`.",
       "default": 5
      },
      "right": {
       "type": "number",
       "description": "Right padding in pixels. Default: `5`.",
       "default": 5
      },
      "top": {
       "type": "number",
       "description": "Top padding in pixels. Default: `2`.",
       "default": 2
      },
      "bottom": {
       "type": "number",
       "description": "Bottom padding in pixels. Default: `2`.",
       "default": 2
      }
     },
     "additionalProperties": false,
     "description": "Space between the text and the box edge, in pixels."
    }
   },
   "additionalProperties": false
  },
  "ApexAnnotations": {
   "type": "object",
   "properties": {
    "yaxis": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/YAxisAnnotations"
     },
     "description": "Horizontal lines or bands at y values."
    },
    "xaxis": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/XAxisAnnotations"
     },
     "description": "Vertical lines or bands at x values."
    },
    "points": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/PointAnnotations"
     },
     "description": "Markers, labels or images at single (x, y) data positions."
    },
    "texts": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/TextAnnotations"
     },
     "description": "Free text placed at pixel positions inside the chart SVG. Default: `[]`.",
     "default": []
    },
    "images": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/ImageAnnotations"
     },
     "description": "Images placed at pixel positions inside the chart SVG. Default: `[]`.",
     "default": []
    }
   },
   "additionalProperties": false
  },
  "ApexColorStop": {
   "type": "object",
   "properties": {
    "offset": {
     "type": "number",
     "description": "Position of the stop along the gradient, in percent (0 to 100)."
    },
    "color": {
     "type": "string",
     "description": "Colour at this stop."
    },
    "opacity": {
     "type": "number",
     "description": "Opacity at this stop (0 to 1)."
    }
   },
   "required": [
    "offset",
    "color",
    "opacity"
   ],
   "additionalProperties": false
  },
  "ApexDataLabels": {
   "type": "object",
   "properties": {
    "readability": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "none",
        "halo",
        "pill",
        "auto",
        "hide"
       ]
      },
      {
       "type": "boolean"
      },
      {
       "type": "object",
       "properties": {
        "mode": {
         "type": "string",
         "enum": [
          "none",
          "halo",
          "pill",
          "auto",
          "hide"
         ],
         "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
        },
        "fallback": {
         "type": "string",
         "enum": [
          "halo",
          "pill",
          "hide"
         ],
         "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
        },
        "enabled": {
         "type": "boolean",
         "description": "false switches the treatment off for this label kind"
        },
        "contrast": {
         "type": "boolean",
         "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
        },
        "minRatio": {
         "type": "number",
         "description": "WCAG 2 contrast ratio to reach. Default 4.5"
        },
        "light": {
         "type": "string",
         "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
        },
        "dark": {
         "type": "string",
         "description": "Dark colour of the pair. Default: `'#111827'`.",
         "default": "#111827"
        },
        "background": {
         "type": "string",
         "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
        },
        "halo": {
         "type": "object",
         "properties": {
          "width": {
           "type": "number",
           "description": "Outline width in pixels. Default: `3`.",
           "default": 3
          },
          "color": {
           "type": "string",
           "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
           "default": "auto"
          },
          "opacity": {
           "type": "number",
           "description": "Outline opacity (0 to 1). Default: `0.92`.",
           "default": 0.92
          },
          "blur": {
           "type": "number",
           "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
           "default": 0
          }
         },
         "additionalProperties": false,
         "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
        },
        "pill": {
         "type": "object",
         "properties": {
          "fill": {
           "type": "string",
           "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
           "default": "auto"
          },
          "opacity": {
           "type": "number",
           "description": "Box opacity (0 to 1). Default: `0.9`.",
           "default": 0.9
          },
          "radius": {
           "type": "number",
           "description": "Corner radius in pixels. Default: `4`.",
           "default": 4
          },
          "padding": {
           "anyOf": [
            {
             "type": "number"
            },
            {
             "type": "array",
             "prefixItems": [
              {
               "type": "number"
              },
              {
               "type": "number"
              }
             ],
             "minItems": 2,
             "maxItems": 2
            }
           ],
           "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
           "default": [
            1,
            4
           ]
          },
          "stroke": {
           "type": "string",
           "description": "Outline colour of the box. Default: `'none'`.",
           "default": "none"
          },
          "strokeWidth": {
           "type": "number",
           "description": "Outline width in pixels. Default: `1`.",
           "default": 1
          },
          "offset": {
           "type": "array",
           "prefixItems": [
            {
             "type": "number"
            },
            {
             "type": "number"
            }
           ],
           "minItems": 2,
           "maxItems": 2,
           "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
           "default": [
            0,
            0
           ]
          }
         },
         "additionalProperties": false,
         "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
        },
        "shadow": {
         "anyOf": [
          {
           "type": "boolean"
          },
          {
           "type": "object",
           "properties": {
            "dx": {
             "type": "number",
             "description": "Horizontal shadow offset in pixels. Default: `0`.",
             "default": 0
            },
            "dy": {
             "type": "number",
             "description": "Vertical shadow offset in pixels. Default: `1`.",
             "default": 1
            },
            "blur": {
             "type": "number",
             "description": "Shadow blur in pixels. Default: `2`.",
             "default": 2
            },
            "color": {
             "type": "string",
             "description": "Shadow colour. Default: `'#000000'`.",
             "default": "#000000"
            },
            "opacity": {
             "type": "number",
             "description": "Shadow opacity (0 to 1). Default: `0.35`.",
             "default": 0.35
            }
           },
           "additionalProperties": false
          }
         ],
         "description": "drop shadow on the pill (on the text in halo mode)"
        },
        "raise": {
         "type": "boolean",
         "description": "axis labels sitting on marks are moved above the series (default true)"
        },
        "each": {
         "x-wcc-type": "function",
         "description": "per label: return an override (or 'none') for this one label; called only when set"
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "West Coast Charts: halo / pill / auto-contrast over the marks (features/readability)"
    },
    "enabled": {
     "type": "boolean",
     "description": "Draws the value next to (or inside) each data point. Default: `true`.",
     "default": true
    },
    "enabledOnSeries": {
     "type": "array",
     "items": {
      "type": "number"
     },
     "description": "Indexes of the series that get labels; not set means all series."
    },
    "textAnchor": {
     "type": "string",
     "enum": [
      "end",
      "start",
      "middle"
     ],
     "description": "Horizontal anchor of the label text: 'start', 'middle' or 'end'. Default: `'middle'`.",
     "default": "middle"
    },
    "distributed": {
     "type": "boolean",
     "description": "Colours each label with the colour of its own point instead of its series. Default: `false`.",
     "default": false
    },
    "offsetX": {
     "type": "number",
     "description": "Moves the labels horizontally. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Moves the labels vertically. Default: `0`.",
     "default": 0
    },
    "style": {
     "type": "object",
     "properties": {
      "fontSize": {
       "type": "string",
       "description": "Font size of the labels. Default: `'12px'`.",
       "default": "12px"
      },
      "fontFamily": {
       "type": "string",
       "description": "Font family of the labels; not set uses `chart.fontFamily`."
      },
      "fontWeight": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Font weight of the labels. Default: `600`.",
       "default": 600
      },
      "colors": {
       "type": "array",
       "items": {},
       "description": "Label colours; not set uses the series colours (or white inside bars and slices)."
      }
     },
     "additionalProperties": false,
     "description": "Text style of the labels."
    },
    "background": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Draws the box. Default: `true`.",
       "default": true
      },
      "foreColor": {
       "type": "string",
       "description": "Text colour used when the box is drawn. Default: `'#fff'`.",
       "default": "#fff"
      },
      "backgroundColor": {
       "type": "string",
       "description": "Box colour; not set uses the series colour."
      },
      "borderRadius": {
       "type": "number",
       "description": "Corner radius of the box in pixels. Default: `2`.",
       "default": 2
      },
      "padding": {
       "type": "number",
       "description": "Space in pixels between text and box border. Default: `4`.",
       "default": 4
      },
      "opacity": {
       "type": "number",
       "description": "Opacity of the box (0 to 1). Default: `0.9`.",
       "default": 0.9
      },
      "borderWidth": {
       "type": "number",
       "description": "Border width of the box in pixels. Default: `1`.",
       "default": 1
      },
      "borderColor": {
       "type": "string",
       "description": "Border colour of the box. Default: `'#fff'`.",
       "default": "#fff"
      },
      "dropShadow": {
       "$ref": "#/$defs/ApexDropShadow",
       "description": "Shadow behind the box."
      }
     },
     "additionalProperties": false,
     "description": "Box drawn behind each label (not on bubble charts)."
    },
    "dropShadow": {
     "$ref": "#/$defs/ApexDropShadow",
     "description": "Shadow behind the label text."
    },
    "formatter": {
     "x-wcc-type": "function",
     "description": "Function that returns the label text from the value and `{ seriesIndex, dataPointIndex, w }`.\nThe built-in one prints the value (percentages on pie and donut)."
    }
   },
   "additionalProperties": false
  },
  "ApexDiscretePoint": {
   "type": "object",
   "properties": {
    "seriesIndex": {
     "type": "number",
     "description": "Series of the point."
    },
    "dataPointIndex": {
     "type": "number",
     "description": "Index of the point in its series."
    },
    "fillColor": {
     "type": "string",
     "description": "Fill colour of this marker."
    },
    "strokeColor": {
     "type": "string",
     "description": "Outline colour of this marker."
    },
    "size": {
     "type": "number",
     "description": "Size of this marker in pixels."
    },
    "shape": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "line",
        "circle",
        "square",
        "rect",
        "cross",
        "plus",
        "star",
        "sparkle",
        "diamond",
        "triangle"
       ]
      },
      {
       "type": "array",
       "items": {
        "type": "string",
        "enum": [
         "line",
         "circle",
         "square",
         "rect",
         "cross",
         "plus",
         "star",
         "sparkle",
         "diamond",
         "triangle"
        ]
       }
      }
     ],
     "description": "Shape of this marker."
    }
   },
   "additionalProperties": false
  },
  "ApexDropShadow": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "Draws the shadow. Default: `false`.",
     "default": false
    },
    "top": {
     "type": "number",
     "description": "Vertical shadow distance in pixels. Default: `2`.",
     "default": 2
    },
    "left": {
     "type": "number",
     "description": "Horizontal shadow distance in pixels. Default: `2`.",
     "default": 2
    },
    "blur": {
     "type": "number",
     "description": "Blur radius in pixels. Default: `4`.",
     "default": 4
    },
    "opacity": {
     "type": "number",
     "description": "Shadow opacity (0 to 1). Default: `0.7`.",
     "default": 0.7
    },
    "color": {
     "type": "string",
     "description": "Shadow colour. Default: `'#000'`.",
     "default": "#000"
    }
   },
   "additionalProperties": false
  },
  "ApexFill": {
   "type": "object",
   "properties": {
    "colors": {
     "type": "array",
     "items": {},
     "description": "Fill colours; not set uses the series colours."
    },
    "opacity": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Fill opacity (0 to 1); an array gives one per series. Default: `0.85`.",
     "default": 0.85
    },
    "type": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "array",
       "items": {
        "type": "string"
       }
      }
     ],
     "description": "'solid', 'gradient', 'pattern' or 'image'; an array gives one per series. Default: `'solid'`.",
     "default": "solid"
    },
    "gradient": {
     "type": "object",
     "properties": {
      "shade": {
       "type": "string",
       "description": "'light' or 'dark': direction in which the series colour is shaded. Default: `'dark'`.",
       "default": "dark"
      },
      "type": {
       "type": "string",
       "description": "Direction: 'horizontal', 'vertical', 'diagonal1', 'diagonal2' or 'radial'. Default:\n`'horizontal'`.",
       "default": "horizontal"
      },
      "shadeIntensity": {
       "type": "number",
       "description": "Strength of the shading (0 to 1). Default: `0.5`.",
       "default": 0.5
      },
      "gradientToColors": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "End colours of the gradient per series; not set shades the series colour."
      },
      "inverseColors": {
       "type": "boolean",
       "description": "Swaps start and end colour for horizontal bars and similar shapes. Default: `true`.",
       "default": true
      },
      "opacityFrom": {
       "anyOf": [
        {
         "type": "number"
        },
        {
         "type": "array",
         "items": {
          "type": "number"
         }
        }
       ],
       "description": "Opacity at the start of the gradient. Default: `1`.",
       "default": 1
      },
      "opacityTo": {
       "anyOf": [
        {
         "type": "number"
        },
        {
         "type": "array",
         "items": {
          "type": "number"
         }
        }
       ],
       "description": "Opacity at the end of the gradient. Default: `1`.",
       "default": 1
      },
      "stops": {
       "type": "array",
       "items": {
        "type": "number"
       },
       "description": "Positions in percent where the gradient changes. Default: `[0,50,100]`.",
       "default": [
        0,
        50,
        100
       ]
      },
      "colorStops": {
       "anyOf": [
        {
         "type": "array",
         "items": {
          "$ref": "#/$defs/ApexColorStop"
         }
        },
        {
         "type": "array",
         "items": {
          "type": "array",
          "items": {
           "$ref": "#/$defs/ApexColorStop"
          }
         }
        }
       ],
       "description": "Explicit stops; when set they replace the generated gradient. An array of arrays gives stops\nper series. Default: `[]`.",
       "default": []
      }
     },
     "additionalProperties": false,
     "description": "Settings for `type: 'gradient'`."
    },
    "image": {
     "type": "object",
     "properties": {
      "src": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       ],
       "description": "Image URL, or one URL per series. Default: `[]`.",
       "default": []
      },
      "width": {
       "type": "number",
       "description": "Width of the image tile in pixels; set together with `height`, otherwise the image is\nstretched to the shape."
      },
      "height": {
       "type": "number",
       "description": "Height of the image tile in pixels; set together with `width`."
      }
     },
     "additionalProperties": false,
     "description": "Settings for `type: 'image'`."
    },
    "pattern": {
     "type": "object",
     "properties": {
      "style": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       ],
       "description": "'verticalLines', 'horizontalLines', 'slantedLines', 'squares' or 'circles'; an array gives\none per series. Default: `'squares'`.",
       "default": "squares"
      },
      "width": {
       "type": "number",
       "description": "Width of the pattern tile in pixels. Default: `6`.",
       "default": 6
      },
      "height": {
       "type": "number",
       "description": "Height of the pattern tile in pixels. Default: `6`.",
       "default": 6
      },
      "strokeWidth": {
       "type": "number",
       "description": "Line width inside the pattern in pixels. Default: `2`.",
       "default": 2
      }
     },
     "additionalProperties": false,
     "description": "Settings for `type: 'pattern'`."
    }
   },
   "additionalProperties": false
  },
  "ApexForecastDataPoints": {
   "type": "object",
   "properties": {
    "count": {
     "type": "number",
     "description": "Number of points at the end of each line series drawn as forecast; 0 turns it off. Default:\n`0`.",
     "default": 0
    },
    "fillOpacity": {
     "type": "number",
     "description": "Opacity of the forecast part (0 to 1). Default: `0.5`.",
     "default": 0.5
    },
    "strokeWidth": {
     "type": "number",
     "description": "Line width of the forecast part; not set keeps the series width."
    },
    "dashArray": {
     "type": "number",
     "description": "Dash length of the forecast part in pixels. Default: `4`.",
     "default": 4
    }
   },
   "additionalProperties": false
  },
  "ApexGrid": {
   "type": "object",
   "properties": {
    "show": {
     "type": "boolean",
     "description": "Draws the grid lines. Default: `true`.",
     "default": true
    },
    "borderColor": {
     "type": "string",
     "description": "Colour of the grid lines. Default: `'#e0e0e0'`.",
     "default": "#e0e0e0"
    },
    "strokeDashArray": {
     "type": "number",
     "description": "Dash length of the grid lines; 0 draws solid lines. Default: `0`.",
     "default": 0
    },
    "position": {
     "type": "string",
     "enum": [
      "front",
      "back"
     ],
     "description": "'back' draws the grid behind the series, 'front' above them. Default: `'back'`.",
     "default": "back"
    },
    "xaxis": {
     "type": "object",
     "properties": {
      "lines": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the vertical grid lines. Default: `false`.",
         "default": false
        },
        "offsetX": {
         "type": "number",
         "description": "Moves the vertical lines horizontally."
        },
        "offsetY": {
         "type": "number",
         "description": "Moves the vertical lines vertically."
        }
       },
       "additionalProperties": false,
       "description": "Vertical grid lines."
      }
     },
     "additionalProperties": false,
     "description": "Vertical grid lines (at the x ticks)."
    },
    "yaxis": {
     "type": "object",
     "properties": {
      "lines": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Draws the horizontal grid lines. Default: `true`.",
         "default": true
        },
        "offsetX": {
         "type": "number",
         "description": "Moves the horizontal lines horizontally."
        },
        "offsetY": {
         "type": "number",
         "description": "Moves the horizontal lines vertically."
        }
       },
       "additionalProperties": false,
       "description": "Horizontal grid lines."
      }
     },
     "additionalProperties": false,
     "description": "Horizontal grid lines (at the y ticks)."
    },
    "row": {
     "type": "object",
     "properties": {
      "colors": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Colours of the bands, repeated in order; not set draws no bands."
      },
      "opacity": {
       "type": "number",
       "description": "Opacity of the bands (0 to 1). Default: `0.5`.",
       "default": 0.5
      }
     },
     "additionalProperties": false,
     "description": "Alternating background bands between horizontal grid lines."
    },
    "column": {
     "type": "object",
     "properties": {
      "colors": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Colours of the bands, repeated in order; not set draws no bands."
      },
      "opacity": {
       "type": "number",
       "description": "Opacity of the bands (0 to 1). Default: `0.5`.",
       "default": 0.5
      }
     },
     "additionalProperties": false,
     "description": "Alternating background bands between vertical grid lines."
    },
    "padding": {
     "type": "object",
     "properties": {
      "top": {
       "type": "number",
       "description": "Space above the grid. Default: `0`.",
       "default": 0
      },
      "right": {
       "type": "number",
       "description": "Space right of the grid. Default: `10`.",
       "default": 10
      },
      "bottom": {
       "type": "number",
       "description": "Space below the grid. Default: `0`.",
       "default": 0
      },
      "left": {
       "type": "number",
       "description": "Space left of the grid. Default: `12`.",
       "default": 12
      }
     },
     "additionalProperties": false,
     "description": "Space in pixels between the grid area and the chart edges."
    }
   },
   "additionalProperties": false
  },
  "ApexLegend": {
   "type": "object",
   "properties": {
    "show": {
     "type": "boolean",
     "description": "Shows the legend. Default: `true`.",
     "default": true
    },
    "showForSingleSeries": {
     "type": "boolean",
     "description": "Shows the legend even when there is only one series. Default: `false`.",
     "default": false
    },
    "showForNullSeries": {
     "type": "boolean",
     "description": "Lists series that contain only null values. Default: `true`.",
     "default": true
    },
    "showForZeroSeries": {
     "type": "boolean",
     "description": "Lists series whose values are all zero. Default: `true`.",
     "default": true
    },
    "floating": {
     "type": "boolean",
     "description": "Takes the legend out of the layout so it overlaps the plot instead of taking space. Default:\n`false`.",
     "default": false
    },
    "inverseOrder": {
     "type": "boolean",
     "description": "Lists the series in reverse order. Default: `false`.",
     "default": false
    },
    "position": {
     "type": "string",
     "enum": [
      "top",
      "right",
      "bottom",
      "left"
     ],
     "description": "Side of the chart: 'top', 'right', 'bottom' or 'left'. Default: `'bottom'`.",
     "default": "bottom"
    },
    "horizontalAlign": {
     "type": "string",
     "enum": [
      "right",
      "left",
      "center"
     ],
     "description": "Alignment of a top/bottom legend: 'left', 'center' or 'right'. Default: `'center'`.",
     "default": "center"
    },
    "fontSize": {
     "type": "string",
     "description": "Font size of the legend texts. Default: `'12px'`.",
     "default": "12px"
    },
    "fontFamily": {
     "type": "string",
     "description": "Font family of the legend texts; not set uses `chart.fontFamily`."
    },
    "fontWeight": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Font weight of the legend texts. Default: `400`.",
     "default": 400
    },
    "width": {
     "type": "number",
     "description": "Fixed width of the legend in pixels."
    },
    "height": {
     "type": "number",
     "description": "Fixed height of the legend in pixels."
    },
    "offsetX": {
     "type": "number",
     "description": "Moves the legend horizontally. Default: `-20`.",
     "default": -20
    },
    "offsetY": {
     "type": "number",
     "description": "Moves the legend vertically. Default: `4`.",
     "default": 4
    },
    "formatter": {
     "x-wcc-type": "function",
     "description": "Function that returns the text of an entry from the series name and `{ seriesIndex, w }`."
    },
    "tooltipHoverFormatter": {
     "x-wcc-type": "function",
     "description": "Function that returns the entry text while the tooltip hovers a data point, so the legend can\nshow the hovered value."
    },
    "customLegendItems": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Texts that replace the series names as legend entries. Default: `[]`.",
     "default": []
    },
    "clusterGroupedSeries": {
     "type": "boolean",
     "description": "With `series[].group`, puts the entries of each group into its own block. Default: `true`.",
     "default": true
    },
    "clusterGroupedSeriesOrientation": {
     "type": "string",
     "description": "Direction in which the group blocks are laid out: 'vertical' or 'horizontal'. Default:\n`'vertical'`.",
     "default": "vertical"
    },
    "labels": {
     "type": "object",
     "properties": {
      "colors": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       ],
       "description": "Text colour; an array gives one colour per entry."
      },
      "useSeriesColors": {
       "type": "boolean",
       "description": "Colours each entry text with its series colour. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Colours of the entry texts."
    },
    "markers": {
     "type": "object",
     "properties": {
      "size": {
       "type": "number",
       "description": "Size of the symbol in pixels. Default: `7`.",
       "default": 7
      },
      "strokeWidth": {
       "anyOf": [
        {
         "type": "number"
        },
        {
         "type": "array",
         "items": {
          "type": "number"
         }
        }
       ],
       "description": "Outline width of the symbol in pixels, or one per series. Default: `1`.",
       "default": 1
      },
      "fillColors": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Symbol colours; not set uses the series colours."
      },
      "shape": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "line",
          "circle",
          "square",
          "rect",
          "cross",
          "plus",
          "star",
          "sparkle",
          "diamond",
          "triangle"
         ]
        },
        {
         "type": "array",
         "items": {
          "type": "string",
          "enum": [
           "line",
           "circle",
           "square",
           "rect",
           "cross",
           "plus",
           "star",
           "sparkle",
           "diamond",
           "triangle"
          ]
         }
        }
       ],
       "description": "Symbol shape ('circle', 'square', 'line', 'plus', 'cross' ...); not set follows the series\nmarker shape."
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the symbols horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the symbols vertically. Default: `0`.",
       "default": 0
      },
      "customHTML": {
       "anyOf": [
        {
         "x-wcc-type": "function"
        },
        {
         "type": "array",
         "items": {
          "x-wcc-type": "function"
         }
        }
       ],
       "description": "Function (or one per series) returning markup that replaces the symbol."
      },
      "onClick": {
       "x-wcc-type": "function",
       "description": "Called when a legend symbol is clicked."
      }
     },
     "additionalProperties": false,
     "description": "The coloured symbols in front of the entries."
    },
    "itemMargin": {
     "type": "object",
     "properties": {
      "horizontal": {
       "type": "number",
       "description": "Space in pixels left and right of each entry. Default: `5`.",
       "default": 5
      },
      "vertical": {
       "type": "number",
       "description": "Space in pixels above and below each entry. Default: `4`.",
       "default": 4
      }
     },
     "additionalProperties": false,
     "description": "Space around each entry."
    },
    "onItemClick": {
     "type": "object",
     "properties": {
      "toggleDataSeries": {
       "type": "boolean",
       "description": "Hides or shows the series of the clicked entry. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "What a click on an entry does."
    },
    "onItemHover": {
     "type": "object",
     "properties": {
      "highlightDataSeries": {
       "type": "boolean",
       "description": "Dims the other series while an entry is hovered. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "What hovering an entry does."
    }
   },
   "additionalProperties": false
  },
  "ApexLocale": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string",
     "description": "Locale name, selected with `chart.defaultLocale` or `setLocale()`."
    },
    "options": {
     "type": "object",
     "properties": {
      "months": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Full month names, January first; used by datetime labels and formats."
      },
      "shortMonths": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Abbreviated month names, January first."
      },
      "days": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Full weekday names, Sunday first."
      },
      "shortDays": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Abbreviated weekday names, Sunday first."
      },
      "toolbar": {
       "type": "object",
       "properties": {
        "selection": {
         "type": "string",
         "description": "Title of the selection button. English: 'Selection'."
        },
        "selectionZoom": {
         "type": "string",
         "description": "Title of the selection-zoom button. English: 'Selection Zoom'."
        },
        "zoomIn": {
         "type": "string",
         "description": "Title of the zoom-in button. English: 'Zoom In'."
        },
        "zoomOut": {
         "type": "string",
         "description": "Title of the zoom-out button. English: 'Zoom Out'."
        },
        "pan": {
         "type": "string",
         "description": "Title of the pan button. English: 'Panning'."
        },
        "reset": {
         "type": "string",
         "description": "Title of the reset-zoom button."
        },
        "exportToSVG": {
         "type": "string",
         "description": "Label of the SVG export menu item. English: 'Download SVG'."
        },
        "exportToPNG": {
         "type": "string",
         "description": "Label of the PNG export menu item. English: 'Download PNG'."
        },
        "exportToCSV": {
         "type": "string",
         "description": "Label of the CSV export menu item. English: 'Download CSV'."
        }
       },
       "additionalProperties": false,
       "description": "Titles of the toolbar buttons and export menu items."
      }
     },
     "additionalProperties": false,
     "description": "Translated strings of the locale."
    }
   },
   "additionalProperties": false
  },
  "ApexMarkers": {
   "type": "object",
   "properties": {
    "size": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Marker radius in pixels; 0 hides markers until a point is hovered. An array gives one per\nseries. Default: `0`.",
     "default": 0
    },
    "colors": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "array",
       "items": {
        "type": "string"
       }
      }
     ],
     "description": "Marker fill colours; not set uses the series colours."
    },
    "strokeColors": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "array",
       "items": {
        "type": "string"
       }
      }
     ],
     "description": "Marker outline colour (or one per series). Default: `'#fff'`.",
     "default": "#fff"
    },
    "strokeWidth": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Marker outline width in pixels. Default: `2`.",
     "default": 2
    },
    "strokeOpacity": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Marker outline opacity (0 to 1). Default: `0.9`.",
     "default": 0.9
    },
    "strokeDashArray": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Dash length of the outline; 0 draws a solid outline. Default: `0`.",
     "default": 0
    },
    "fillOpacity": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Marker fill opacity (0 to 1). Default: `1`.",
     "default": 1
    },
    "discrete": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/ApexDiscretePoint"
     },
     "description": "Individual markers with their own look, addressed by series and data index. Default: `[]`.",
     "default": []
    },
    "shape": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "line",
        "circle",
        "square",
        "rect",
        "cross",
        "plus",
        "star",
        "sparkle",
        "diamond",
        "triangle"
       ]
      },
      {
       "type": "array",
       "items": {
        "type": "string",
        "enum": [
         "line",
         "circle",
         "square",
         "rect",
         "cross",
         "plus",
         "star",
         "sparkle",
         "diamond",
         "triangle"
        ]
       }
      }
     ],
     "description": "'circle', 'square', 'rect', 'diamond', 'triangle', 'cross', 'plus', 'star' or 'sparkle'; an\narray gives one per series. Default: `'circle'`.",
     "default": "circle"
    },
    "offsetX": {
     "type": "number",
     "description": "Moves the markers horizontally. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Moves the markers vertically. Default: `0`.",
     "default": 0
    },
    "showNullDataPoints": {
     "type": "boolean",
     "description": "After a null value, draws a marker on the next point so values that stand alone between gaps\nstay visible. Default: `true`.",
     "default": true
    },
    "onClick": {
     "x-wcc-type": "function",
     "description": "Called when a marker is clicked."
    },
    "onDblClick": {
     "x-wcc-type": "function",
     "description": "Called when a marker is double-clicked."
    },
    "hover": {
     "type": "object",
     "properties": {
      "size": {
       "type": "number",
       "description": "Fixed hover radius in pixels; when set it replaces `sizeOffset`."
      },
      "sizeOffset": {
       "type": "number",
       "description": "Pixels added to the radius while hovered. Default: `3`.",
       "default": 3
      }
     },
     "additionalProperties": false,
     "description": "Marker size while hovered."
    }
   },
   "additionalProperties": false
  },
  "ApexNoData": {
   "type": "object",
   "properties": {
    "text": {
     "type": "string",
     "description": "The text; not set shows nothing for empty charts."
    },
    "align": {
     "type": "string",
     "enum": [
      "right",
      "left",
      "center"
     ],
     "description": "'left', 'center' or 'right'. Default: `'center'`.",
     "default": "center"
    },
    "verticalAlign": {
     "type": "string",
     "enum": [
      "top",
      "bottom",
      "middle"
     ],
     "description": "'top', 'middle' or 'bottom'. Default: `'middle'`.",
     "default": "middle"
    },
    "offsetX": {
     "type": "number",
     "description": "Moves the text horizontally. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Moves the text vertically. Default: `0`.",
     "default": 0
    },
    "style": {
     "type": "object",
     "properties": {
      "color": {
       "type": "string",
       "description": "Text colour; not set uses `chart.foreColor`."
      },
      "fontSize": {
       "type": "string",
       "description": "Font size. Default: `'14px'`.",
       "default": "14px"
      },
      "fontFamily": {
       "type": "string",
       "description": "Font family; not set uses `chart.fontFamily`."
      }
     },
     "additionalProperties": false,
     "description": "Text style."
    }
   },
   "additionalProperties": false
  },
  "ApexResponsive": {
   "type": "object",
   "properties": {
    "breakpoint": {
     "type": "number",
     "description": "Container width in pixels at and below which `options` apply."
    },
    "options": {
     "description": "Options merged over the chart options while the width is at or below `breakpoint`."
    }
   },
   "additionalProperties": false
  },
  "ApexStates": {
   "type": "object",
   "properties": {
    "hover": {
     "type": "object",
     "properties": {
      "filter": {
       "type": "object",
       "properties": {
        "type": {
         "type": "string",
         "description": "'lighten', 'darken' or 'none'. Default: `'lighten'`.",
         "default": "lighten"
        }
       },
       "additionalProperties": false,
       "description": "Filter applied to the hovered shape."
      }
     },
     "additionalProperties": false,
     "description": "Look of a hovered data point."
    },
    "active": {
     "type": "object",
     "properties": {
      "allowMultipleDataPointsSelection": {
       "type": "boolean",
       "description": "Lets several points be selected at once; a click on a selected one unselects it. Default:\n`false`.",
       "default": false
      },
      "filter": {
       "type": "object",
       "properties": {
        "type": {
         "type": "string",
         "description": "'lighten', 'darken' or 'none'. Default: `'darken'`.",
         "default": "darken"
        }
       },
       "additionalProperties": false,
       "description": "Filter applied to the selected shape."
      }
     },
     "additionalProperties": false,
     "description": "Look of a selected (clicked) data point."
    }
   },
   "additionalProperties": false
  },
  "ApexStroke": {
   "type": "object",
   "properties": {
    "show": {
     "type": "boolean",
     "description": "Draws lines and outlines. Default: `true`.",
     "default": true
    },
    "curve": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "straight",
        "smooth",
        "stepline",
        "linestep",
        "monotoneCubic"
       ]
      },
      {
       "type": "array",
       "items": {
        "type": "string",
        "enum": [
         "straight",
         "smooth",
         "stepline",
         "linestep",
         "monotoneCubic"
        ]
       }
      }
     ],
     "description": "Line shape between points: 'smooth', 'straight', 'stepline', 'linestep' or 'monotoneCubic'; an\narray gives one per series. Default: `'smooth'`.",
     "default": "smooth"
    },
    "lineCap": {
     "type": "string",
     "enum": [
      "square",
      "butt",
      "round"
     ],
     "description": "Line ends: 'butt', 'square' or 'round'. Default: `'butt'`.",
     "default": "butt"
    },
    "colors": {
     "anyOf": [
      {
       "type": "array",
       "items": {}
      },
      {
       "type": "array",
       "items": {
        "type": "string"
       }
      }
     ],
     "description": "Line colours; not set uses the series colours."
    },
    "width": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Line width in pixels; an array gives one per series. Default: `2`.",
     "default": 2
    },
    "dashArray": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Dash length in pixels; 0 draws solid lines; an array gives one per series. Default: `0`.",
     "default": 0
    },
    "fill": {
     "$ref": "#/$defs/ApexFill",
     "description": "Fill of the line itself on area charts (for example a gradient line); same shape as `fill`."
    }
   },
   "additionalProperties": false
  },
  "ApexTheme": {
   "type": "object",
   "properties": {
    "accessibility": {
     "type": "object",
     "properties": {
      "colorBlindMode": {
       "type": "string",
       "enum": [
        "",
        "deuteranopia",
        "protanopia",
        "tritanopia",
        "highContrast"
       ],
       "description": "Colour-vision palette: 'deuteranopia', 'protanopia', 'tritanopia' (needs\n`west-coast-charts/types`) or 'highContrast' (also turns data labels on and widens lines to\nat least 3 px); '' keeps the normal palette. Default: `''`.",
       "default": ""
      }
     },
     "additionalProperties": false,
     "description": "West Coast Charts: colour-vision palettes / high contrast"
    },
    "mode": {
     "type": "string",
     "enum": [
      "auto",
      "light",
      "dark"
     ],
     "description": "West Coast Charts: 'auto' follows prefers-color-scheme"
    },
    "preset": {
     "type": "string",
     "enum": [
      "coastal",
      "midnight",
      "paper",
      "accessible",
      "classic"
     ],
     "description": "West Coast Charts: built-in design-token preset ('classic' = 4.7.0 look)"
    },
    "tokens": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "$ref": "#/$defs/WccThemeTokens"
      }
     ],
     "description": "true: read --wcc-* / --apx-* CSS tokens (default); false: ignore them; object: token overrides"
    },
    "follow": {
     "anyOf": [
      {
       "const": "os"
      },
      {
       "const": false
      }
     ],
     "description": "'os': follow prefers-color-scheme"
    },
    "name": {
     "type": "string",
     "description": "theme registered with registerTheme()"
    },
    "palette": {
     "type": "string",
     "description": "Name of the built-in palette ('palette1' ... 'palette10'). Default: `'palette1'`.",
     "default": "palette1"
    },
    "monochrome": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Turns monochrome colouring on. Default: `false`.",
       "default": false
      },
      "color": {
       "type": "string",
       "description": "The base colour. Default: `'#008FFB'`.",
       "default": "#008FFB"
      },
      "shadeTo": {
       "type": "string",
       "enum": [
        "light",
        "dark"
       ],
       "description": "'light' or 'dark': direction of the shades. Default: `'light'`.",
       "default": "light"
      },
      "shadeIntensity": {
       "type": "number",
       "description": "How far the shades spread from the base colour (0 to 1). Default: `0.65`.",
       "default": 0.65
      }
     },
     "additionalProperties": false,
     "description": "Derives all series colours from one base colour."
    }
   },
   "additionalProperties": false
  },
  "ApexTitleSubtitle": {
   "type": "object",
   "properties": {
    "text": {
     "type": "string",
     "description": "The text; not set draws nothing."
    },
    "align": {
     "type": "string",
     "enum": [
      "right",
      "left",
      "center"
     ],
     "description": "'left', 'center' or 'right'. Default: `'left'`.",
     "default": "left"
    },
    "margin": {
     "type": "number",
     "description": "Space in pixels below the text before the plot starts. Default: `5`.",
     "default": 5
    },
    "offsetX": {
     "type": "number",
     "description": "Moves the text horizontally. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Moves the text vertically. Default: `0` for `title`, `30` for `subtitle`.",
     "default": 0
    },
    "floating": {
     "type": "boolean",
     "description": "Takes the text out of the layout so the plot starts at the top. Default: `false`.",
     "default": false
    },
    "style": {
     "type": "object",
     "properties": {
      "fontSize": {
       "type": "string",
       "description": "Font size. Default: `'14px'` for `title`, `'12px'` for `subtitle`.",
       "default": "14px"
      },
      "fontFamily": {
       "type": "string",
       "description": "Font family; not set uses `chart.fontFamily`."
      },
      "fontWeight": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Font weight. Default: `900` for `title`, `400` for `subtitle`.",
       "default": 900
      },
      "color": {
       "type": "string",
       "description": "Text colour; not set uses `chart.foreColor`."
      }
     },
     "additionalProperties": false,
     "description": "Text style."
    }
   },
   "additionalProperties": false
  },
  "ApexTooltip": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "Shows the tooltip. Default: `true`.",
     "default": true
    },
    "enabledOnSeries": {
     "type": "array",
     "items": {
      "type": "number"
     },
     "description": "Indexes of the series that appear in the tooltip; not set means all series."
    },
    "shared": {
     "type": "boolean",
     "description": "Shows all series at the hovered x position in one tooltip; false shows only the nearest series.\nDefault: `true`.",
     "default": true
    },
    "followCursor": {
     "type": "boolean",
     "description": "Moves the tooltip with the pointer instead of anchoring it to the data point. Default: `false`.",
     "default": false
    },
    "intersect": {
     "type": "boolean",
     "description": "Shows the tooltip only while the pointer is over a marker or bar, not anywhere in its column.\nDefault: `false`.",
     "default": false
    },
    "inverseOrder": {
     "type": "boolean",
     "description": "Lists the series in reverse order in a shared tooltip. Default: `false`.",
     "default": false
    },
    "custom": {
     "anyOf": [
      {
       "x-wcc-type": "function"
      },
      {
       "type": "array",
       "items": {
        "x-wcc-type": "function"
       }
      }
     ],
     "description": "Function (or one per series) returning the complete tooltip markup from `{ series, seriesIndex,\ndataPointIndex, w }`; the output goes through `chart.sanitizeHtml`."
    },
    "fillSeriesColor": {
     "type": "boolean",
     "description": "Uses the hovered series colour as tooltip background. Default: `false`.",
     "default": false
    },
    "theme": {
     "type": "string",
     "description": "Colour scheme of the tooltip box: 'light' or 'dark'. Default: `'light'`.",
     "default": "light"
    },
    "cssClass": {
     "type": "string",
     "description": "CSS class added to the tooltip element. Default: `''`.",
     "default": ""
    },
    "hideEmptySeries": {
     "type": "boolean",
     "description": "Leaves out series that have no value at the hovered position. Default: `false`.",
     "default": false
    },
    "style": {
     "type": "object",
     "properties": {
      "fontSize": {
       "type": "string",
       "description": "Font size of the tooltip text. Default: `'12px'`.",
       "default": "12px"
      },
      "fontFamily": {
       "type": "string",
       "description": "Font family of the tooltip text; not set uses `chart.fontFamily`."
      }
     },
     "additionalProperties": false,
     "description": "Text style of the tooltip."
    },
    "onDatasetHover": {
     "type": "object",
     "properties": {
      "highlightDataSeries": {
       "type": "boolean",
       "description": "Dims the other series while a point is hovered. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "What hovering a data point does to the other series."
    },
    "x": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the header row. Default: `true`.",
       "default": true
      },
      "format": {
       "type": "string",
       "description": "Date format of the header on datetime axes. Default: `'dd MMM'`.",
       "default": "dd MMM"
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Function that returns the header text from the x value."
      }
     },
     "additionalProperties": false,
     "description": "The header row of the tooltip (the x value)."
    },
    "y": {
     "anyOf": [
      {
       "$ref": "#/$defs/ApexTooltipY"
      },
      {
       "type": "array",
       "items": {
        "$ref": "#/$defs/ApexTooltipY"
       }
      }
     ],
     "description": "Value rows of the tooltip; an array gives settings per series."
    },
    "z": {
     "type": "object",
     "properties": {
      "title": {
       "type": "string",
       "description": "Text in front of the z value. Default: `'Size: '`.",
       "default": "Size: "
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Function that returns the z text from the value."
      }
     },
     "additionalProperties": false,
     "description": "Third value of bubble charts (bubble size)."
    },
    "marker": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the dot. Default: `true`.",
       "default": true
      },
      "fillColors": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Dot colours; not set uses the series colours."
      }
     },
     "additionalProperties": false,
     "description": "The coloured dot in front of each tooltip row."
    },
    "items": {
     "type": "object",
     "properties": {
      "display": {
       "type": "string",
       "description": "CSS `display` value of each row ('flex' puts the dot and text side by side). Default:\n`'flex'`.",
       "default": "flex"
      }
     },
     "additionalProperties": false,
     "description": "Layout of the tooltip rows."
    },
    "fixed": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Enables the pinned position. Default: `false`.",
       "default": false
      },
      "position": {
       "type": "string",
       "description": "Corner: 'topLeft', 'topRight', 'bottomLeft' or 'bottomRight'. Default: `'topRight'`.",
       "default": "topRight"
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the pinned tooltip horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the pinned tooltip vertically. Default: `0`.",
       "default": 0
      }
     },
     "additionalProperties": false,
     "description": "Pins the tooltip to a corner of the plot instead of next to the data point."
    }
   },
   "additionalProperties": false
  },
  "ApexTooltipY": {
   "type": "object",
   "properties": {
    "title": {
     "type": "object",
     "properties": {
      "formatter": {
       "x-wcc-type": "function",
       "description": "Function that returns the name text from the series name. The built-in one appends ': ' (and returns '' for an unnamed series)."
      }
     },
     "additionalProperties": false,
     "description": "Series name part of a tooltip row."
    },
    "formatter": {
     "x-wcc-type": "function",
     "description": "Function that returns the value text from the value and `{ series, seriesIndex, dataPointIndex,\nw }`."
    }
   },
   "additionalProperties": false
  },
  "ApexXAxis": {
   "type": "object",
   "properties": {
    "type": {
     "type": "string",
     "enum": [
      "category",
      "datetime",
      "numeric"
     ],
     "description": "How x values are read: 'category' (labels in order), 'numeric' (linear numbers) or 'datetime'\n(timestamps or date strings on a time scale). Default: `'category'`.",
     "default": "category"
    },
    "categories": {
     "description": "Labels of the x positions when the series data are plain values; for datetime axes these can be\ndates. Default: `[]`.",
     "default": []
    },
    "overwriteCategories": {
     "anyOf": [
      {
       "type": "array",
       "items": {
        "type": "string"
       }
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Replaces the displayed x labels with these texts without changing the data or the scale."
    },
    "offsetX": {
     "type": "number",
     "description": "Moves the x axis (labels, border, ticks) horizontally by this many pixels. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Moves the x axis vertically by this many pixels. Default: `0`.",
     "default": 0
    },
    "sorted": {
     "type": "boolean",
     "description": "Accepted for ApexCharts 4.x type compatibility; the renderer does not read it."
    },
    "labels": {
     "type": "object",
     "properties": {
      "readability": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "none",
          "halo",
          "pill",
          "auto",
          "hide"
         ]
        },
        {
         "type": "boolean"
        },
        {
         "type": "object",
         "properties": {
          "mode": {
           "type": "string",
           "enum": [
            "none",
            "halo",
            "pill",
            "auto",
            "hide"
           ],
           "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
          },
          "fallback": {
           "type": "string",
           "enum": [
            "halo",
            "pill",
            "hide"
           ],
           "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
          },
          "enabled": {
           "type": "boolean",
           "description": "false switches the treatment off for this label kind"
          },
          "contrast": {
           "type": "boolean",
           "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
          },
          "minRatio": {
           "type": "number",
           "description": "WCAG 2 contrast ratio to reach. Default 4.5"
          },
          "light": {
           "type": "string",
           "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
          },
          "dark": {
           "type": "string",
           "description": "Dark colour of the pair. Default: `'#111827'`.",
           "default": "#111827"
          },
          "background": {
           "type": "string",
           "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
          },
          "halo": {
           "type": "object",
           "properties": {
            "width": {
             "type": "number",
             "description": "Outline width in pixels. Default: `3`.",
             "default": 3
            },
            "color": {
             "type": "string",
             "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
             "default": "auto"
            },
            "opacity": {
             "type": "number",
             "description": "Outline opacity (0 to 1). Default: `0.92`.",
             "default": 0.92
            },
            "blur": {
             "type": "number",
             "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
             "default": 0
            }
           },
           "additionalProperties": false,
           "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
          },
          "pill": {
           "type": "object",
           "properties": {
            "fill": {
             "type": "string",
             "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
             "default": "auto"
            },
            "opacity": {
             "type": "number",
             "description": "Box opacity (0 to 1). Default: `0.9`.",
             "default": 0.9
            },
            "radius": {
             "type": "number",
             "description": "Corner radius in pixels. Default: `4`.",
             "default": 4
            },
            "padding": {
             "anyOf": [
              {
               "type": "number"
              },
              {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 2,
               "maxItems": 2
              }
             ],
             "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
             "default": [
              1,
              4
             ]
            },
            "stroke": {
             "type": "string",
             "description": "Outline colour of the box. Default: `'none'`.",
             "default": "none"
            },
            "strokeWidth": {
             "type": "number",
             "description": "Outline width in pixels. Default: `1`.",
             "default": 1
            },
            "offset": {
             "type": "array",
             "prefixItems": [
              {
               "type": "number"
              },
              {
               "type": "number"
              }
             ],
             "minItems": 2,
             "maxItems": 2,
             "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
             "default": [
              0,
              0
             ]
            }
           },
           "additionalProperties": false,
           "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
          },
          "shadow": {
           "anyOf": [
            {
             "type": "boolean"
            },
            {
             "type": "object",
             "properties": {
              "dx": {
               "type": "number",
               "description": "Horizontal shadow offset in pixels. Default: `0`.",
               "default": 0
              },
              "dy": {
               "type": "number",
               "description": "Vertical shadow offset in pixels. Default: `1`.",
               "default": 1
              },
              "blur": {
               "type": "number",
               "description": "Shadow blur in pixels. Default: `2`.",
               "default": 2
              },
              "color": {
               "type": "string",
               "description": "Shadow colour. Default: `'#000000'`.",
               "default": "#000000"
              },
              "opacity": {
               "type": "number",
               "description": "Shadow opacity (0 to 1). Default: `0.35`.",
               "default": 0.35
              }
             },
             "additionalProperties": false
            }
           ],
           "description": "drop shadow on the pill (on the text in halo mode)"
          },
          "raise": {
           "type": "boolean",
           "description": "axis labels sitting on marks are moved above the series (default true)"
          },
          "each": {
           "x-wcc-type": "function",
           "description": "per label: return an override (or 'none') for this one label; called only when set"
          }
         },
         "additionalProperties": false
        }
       ],
       "description": "West Coast Charts: halo / pill / auto-contrast where labels overlap marks (features/readability)"
      },
      "show": {
       "type": "boolean",
       "description": "Shows the x labels. Default: `true`.",
       "default": true
      },
      "rotate": {
       "type": "number",
       "description": "Rotation in degrees applied when the labels would overlap (category axes). Default: `-45`.",
       "default": -45
      },
      "rotateAlways": {
       "type": "boolean",
       "description": "Rotates the labels even when they would fit. Default: `false`.",
       "default": false
      },
      "hideOverlappingLabels": {
       "type": "boolean",
       "description": "Drops a label that would overlap the label drawn before it. Default: `true`.",
       "default": true
      },
      "showDuplicates": {
       "type": "boolean",
       "description": "On datetime axes, false drops a label whose text repeats the previous label. Default:\n`true`.",
       "default": true
      },
      "trim": {
       "type": "boolean",
       "description": "Cuts long labels to the available width and adds an ellipsis. Default: `false`.",
       "default": false
      },
      "minHeight": {
       "type": "number",
       "description": "Minimum height in pixels reserved for the x labels."
      },
      "maxHeight": {
       "type": "number",
       "description": "Maximum height in pixels the (rotated) x labels may take; longer ones are cut. Default:\n`120`.",
       "default": 120
      },
      "style": {
       "type": "object",
       "properties": {
        "colors": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Label colour; an array gives one colour per label. Empty uses `chart.foreColor`. Default:\n`[]`.",
         "default": []
        },
        "fontSize": {
         "type": "string",
         "description": "Font size of the labels. Default: `'12px'`.",
         "default": "12px"
        },
        "fontFamily": {
         "type": "string",
         "description": "Font family of the labels; not set uses `chart.fontFamily`."
        },
        "fontWeight": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Font weight of the labels. Default: `400`.",
         "default": 400
        },
        "cssClass": {
         "type": "string",
         "description": "CSS class added to every label text element. Default: `''`.",
         "default": ""
        }
       },
       "additionalProperties": false,
       "description": "Text style of the x labels."
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the labels horizontally by this many pixels. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the labels vertically by this many pixels. Default: `0`.",
       "default": 0
      },
      "format": {
       "type": "string",
       "description": "Date format string for datetime labels (for example 'dd MMM'); overrides `datetimeFormatter`."
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Function that returns the text of each label from its value (and timestamp on datetime axes)."
      },
      "datetimeUTC": {
       "type": "boolean",
       "description": "Formats datetime labels in UTC; false uses the browser's local time zone. Default: `true`.",
       "default": true
      },
      "datetimeFormatter": {
       "type": "object",
       "properties": {
        "year": {
         "type": "string",
         "description": "Format of ticks that fall on a new year. Default: `'yyyy'`.",
         "default": "yyyy"
        },
        "month": {
         "type": "string",
         "description": "Format of ticks that fall on a new month. Default: `'MMM 'yy'`.",
         "default": "MMM 'yy"
        },
        "day": {
         "type": "string",
         "description": "Format of ticks that fall on a new day. Default: `'dd MMM'`.",
         "default": "dd MMM"
        },
        "hour": {
         "type": "string",
         "description": "Format of hour ticks. Default: `'HH:mm'`.",
         "default": "HH:mm"
        },
        "minute": {
         "type": "string",
         "description": "Format of minute ticks. Default: `'HH:mm:ss'`.",
         "default": "HH:mm:ss"
        },
        "second": {
         "type": "string",
         "description": "Format of second ticks. Default: `'HH:mm:ss'`.",
         "default": "HH:mm:ss"
        }
       },
       "additionalProperties": false,
       "description": "Date format per tick unit, chosen from the span of the visible range."
      }
     },
     "additionalProperties": false,
     "description": "The text labels along the x axis."
    },
    "group": {
     "type": "object",
     "properties": {
      "groups": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "title": {
          "type": "string",
          "description": "Text shown under the group."
         },
         "cols": {
          "type": "number",
          "description": "Number of categories the group spans."
         }
        },
        "required": [
         "title",
         "cols"
        ],
        "additionalProperties": false
       },
       "description": "The groups, left to right. Default: `[]`.",
       "default": []
      },
      "style": {
       "type": "object",
       "properties": {
        "colors": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Colour of the group labels; an array gives one per group. Default: `[]`.",
         "default": []
        },
        "fontSize": {
         "type": "string",
         "description": "Font size of the group labels. Default: `'12px'`.",
         "default": "12px"
        },
        "fontFamily": {
         "type": "string",
         "description": "Font family of the group labels."
        },
        "fontWeight": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Font weight of the group labels. Default: `400`.",
         "default": 400
        },
        "cssClass": {
         "type": "string",
         "description": "CSS class added to the group label elements. Default: `''`.",
         "default": ""
        }
       },
       "additionalProperties": false,
       "description": "Text style of the group labels."
      }
     },
     "additionalProperties": false,
     "description": "A second row of labels under the x labels that spans groups of categories."
    },
    "axisBorder": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws the axis line. Default: `true`.",
       "default": true
      },
      "color": {
       "type": "string",
       "description": "Colour of the axis line. Default: `'#e0e0e0'`.",
       "default": "#e0e0e0"
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the axis line horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the axis line vertically. Default: `0`.",
       "default": 0
      },
      "strokeWidth": {
       "type": "number",
       "description": "Accepted for ApexCharts 4.x type compatibility; the renderer does not read it."
      }
     },
     "additionalProperties": false,
     "description": "The line along the x axis."
    },
    "axisTicks": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws the tick marks. Default: `true`.",
       "default": true
      },
      "borderType": {
       "type": "string",
       "description": "Accepted for ApexCharts 4.x type compatibility; the renderer does not read it."
      },
      "color": {
       "type": "string",
       "description": "Colour of the tick marks. Default: `'#e0e0e0'`.",
       "default": "#e0e0e0"
      },
      "height": {
       "type": "number",
       "description": "Length of the tick marks in pixels. Default: `6`.",
       "default": 6
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the tick marks horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the tick marks vertically. Default: `0`.",
       "default": 0
      }
     },
     "additionalProperties": false,
     "description": "Short tick marks below the axis line."
    },
    "tickPlacement": {
     "type": "string",
     "description": "'on' puts ticks and labels on the data points; 'between' puts the points between the ticks (the\nusual look for columns). Default: `'on'`.",
     "default": "on"
    },
    "tickAmount": {
     "anyOf": [
      {
       "const": "dataPoints"
      },
      {
       "type": "number"
      }
     ],
     "description": "Number of intervals on a numeric axis; 'dataPoints' makes one tick per data point."
    },
    "stepSize": {
     "type": "number",
     "description": "Distance between two ticks in axis units; used instead of `tickAmount`."
    },
    "min": {
     "type": "number",
     "description": "Lowest x value shown; data below it are cut off."
    },
    "max": {
     "type": "number",
     "description": "Highest x value shown; data above it are cut off."
    },
    "range": {
     "type": "number",
     "description": "Width of the visible x window, ending at the newest value; useful for live data with\nappendData."
    },
    "floating": {
     "type": "boolean",
     "description": "Takes the x axis out of the layout so the plot uses its height; the labels are drawn over the\nplot. Default: `false`.",
     "default": false
    },
    "decimalsInFloat": {
     "type": "number",
     "description": "Number of decimals in numeric x labels; not set picks a value from the range."
    },
    "position": {
     "type": "string",
     "description": "'bottom' or 'top' of the plot. Default: `'bottom'`.",
     "default": "bottom"
    },
    "title": {
     "type": "object",
     "properties": {
      "text": {
       "type": "string",
       "description": "The title text; not set draws no title."
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the title horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the title vertically. Default: `0`.",
       "default": 0
      },
      "style": {
       "type": "object",
       "properties": {
        "color": {
         "type": "string",
         "description": "Title colour; not set uses `chart.foreColor`."
        },
        "fontFamily": {
         "type": "string",
         "description": "Title font family."
        },
        "fontWeight": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Title font weight. Default: `900`.",
         "default": 900
        },
        "fontSize": {
         "type": "string",
         "description": "Title font size. Default: `'12px'`.",
         "default": "12px"
        },
        "cssClass": {
         "type": "string",
         "description": "CSS class added to the title element. Default: `''`.",
         "default": ""
        }
       },
       "additionalProperties": false,
       "description": "Text style of the title."
      }
     },
     "additionalProperties": false,
     "description": "Title text of the x axis."
    },
    "crosshairs": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the crosshair. Default: `true`.",
       "default": true
      },
      "width": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "'tickWidth' spans one category, 'barWidth' matches the bar width, a number is pixels.\nDefault: `1`.",
       "default": 1
      },
      "position": {
       "type": "string",
       "description": "'back' draws it behind the series, 'front' above them. Default: `'back'`.",
       "default": "back"
      },
      "opacity": {
       "type": "number",
       "description": "Opacity of the crosshair (0 to 1). Default: `0.9`.",
       "default": 0.9
      },
      "stroke": {
       "type": "object",
       "properties": {
        "color": {
         "type": "string",
         "description": "Line colour. Default: `'#b6b6b6'`.",
         "default": "#b6b6b6"
        },
        "width": {
         "type": "number",
         "description": "Line width in pixels; 0 hides the line. Default: `1`.",
         "default": 1
        },
        "dashArray": {
         "type": "number",
         "description": "Dash length in pixels; 0 draws a solid line. Default: `3`.",
         "default": 3
        }
       },
       "additionalProperties": false,
       "description": "Line of a thin crosshair."
      },
      "fill": {
       "type": "object",
       "properties": {
        "type": {
         "type": "string",
         "description": "'solid' or 'gradient'. Default: `'solid'`.",
         "default": "solid"
        },
        "color": {
         "type": "string",
         "description": "Fill colour for type 'solid'. Default: `'#B1B9C4'`.",
         "default": "#B1B9C4"
        },
        "gradient": {
         "type": "object",
         "properties": {
          "colorFrom": {
           "type": "string",
           "description": "Colour at the start of the gradient. Default: `'#D8E3F0'`.",
           "default": "#D8E3F0"
          },
          "colorTo": {
           "type": "string",
           "description": "Colour at the end of the gradient. Default: `'#BED1E6'`.",
           "default": "#BED1E6"
          },
          "stops": {
           "type": "array",
           "items": {
            "type": "number"
           },
           "description": "Gradient stop positions in percent. Default: `[0,100]`.",
           "default": [
            0,
            100
           ]
          },
          "opacityFrom": {
           "type": "number",
           "description": "Opacity at the start of the gradient. Default: `0.4`.",
           "default": 0.4
          },
          "opacityTo": {
           "type": "number",
           "description": "Opacity at the end of the gradient. Default: `0.5`.",
           "default": 0.5
          }
         },
         "additionalProperties": false,
         "description": "Gradient for type 'gradient'."
        }
       },
       "additionalProperties": false,
       "description": "Fill of a wide crosshair (when `width` is more than one pixel)."
      },
      "dropShadow": {
       "$ref": "#/$defs/ApexDropShadow",
       "description": "Shadow behind the crosshair."
      }
     },
     "additionalProperties": false,
     "description": "Vertical marker that follows the hovered x position."
    },
    "tooltip": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Shows the x-axis tooltip. Default: `true`.",
       "default": true
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the x-axis tooltip vertically. Default: `0`.",
       "default": 0
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Function that returns the text of the x-axis tooltip from the x value."
      },
      "style": {
       "type": "object",
       "properties": {
        "fontSize": {
         "type": "string",
         "description": "Font size of the x-axis tooltip. Default: `'12px'`.",
         "default": "12px"
        },
        "fontFamily": {
         "type": "string",
         "description": "Font family of the x-axis tooltip."
        }
       },
       "additionalProperties": false,
       "description": "Text style of the x-axis tooltip."
      }
     },
     "additionalProperties": false,
     "description": "Small box on the x axis that shows the hovered x value."
    }
   },
   "additionalProperties": false
  },
  "ApexYAxis": {
   "type": "object",
   "properties": {
    "wcc": {
     "type": "object",
     "properties": {
      "alignZero": {
       "type": "boolean",
       "description": "Puts zero on the same gridline on every axis that sets it. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "West Coast Charts: y axis extras."
    },
    "show": {
     "type": "boolean",
     "description": "Draws this y axis. Default: `true`.",
     "default": true
    },
    "showAlways": {
     "type": "boolean",
     "description": "Keeps the axis when all series bound to it are hidden through the legend. Default: `false`.",
     "default": false
    },
    "showForNullSeries": {
     "type": "boolean",
     "description": "Draws the axis even when all its series contain only null values. Default: `true`.",
     "default": true
    },
    "seriesName": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "array",
       "items": {
        "type": "string"
       }
      }
     ],
     "description": "Name (or names) of the series this axis belongs to; series without a match use the first axis.\nUsed with several y axes."
    },
    "opposite": {
     "type": "boolean",
     "description": "Puts the axis on the right side. Default: `false`.",
     "default": false
    },
    "reversed": {
     "type": "boolean",
     "description": "Turns the axis upside down (highest value at the bottom). Default: `false`.",
     "default": false
    },
    "logarithmic": {
     "type": "boolean",
     "description": "Uses a logarithmic scale. Default: `false`.",
     "default": false
    },
    "logBase": {
     "type": "number",
     "description": "Base of the logarithmic scale. Default: `10`.",
     "default": 10
    },
    "tickAmount": {
     "type": "number",
     "description": "Number of intervals; not set picks a value from the chart height."
    },
    "stepSize": {
     "type": "number",
     "description": "Distance between two ticks in axis units; used instead of `tickAmount`."
    },
    "forceNiceScale": {
     "type": "boolean",
     "description": "Rounds min, max and step to round numbers even when min or max are given. Default: `false`.",
     "default": false
    },
    "min": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Lowest value shown; a function receives the data minimum and returns the axis minimum."
    },
    "max": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Highest value shown; a function receives the data maximum and returns the axis maximum."
    },
    "floating": {
     "type": "boolean",
     "description": "Takes the axis out of the layout so the plot uses its width; the labels are drawn over the\nplot. Default: `false`.",
     "default": false
    },
    "decimalsInFloat": {
     "type": "number",
     "description": "Number of decimals in the labels; not set picks a value from the range."
    },
    "labels": {
     "type": "object",
     "properties": {
      "readability": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "none",
          "halo",
          "pill",
          "auto",
          "hide"
         ]
        },
        {
         "type": "boolean"
        },
        {
         "type": "object",
         "properties": {
          "mode": {
           "type": "string",
           "enum": [
            "none",
            "halo",
            "pill",
            "auto",
            "hide"
           ],
           "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
          },
          "fallback": {
           "type": "string",
           "enum": [
            "halo",
            "pill",
            "hide"
           ],
           "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
          },
          "enabled": {
           "type": "boolean",
           "description": "false switches the treatment off for this label kind"
          },
          "contrast": {
           "type": "boolean",
           "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
          },
          "minRatio": {
           "type": "number",
           "description": "WCAG 2 contrast ratio to reach. Default 4.5"
          },
          "light": {
           "type": "string",
           "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
          },
          "dark": {
           "type": "string",
           "description": "Dark colour of the pair. Default: `'#111827'`.",
           "default": "#111827"
          },
          "background": {
           "type": "string",
           "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
          },
          "halo": {
           "type": "object",
           "properties": {
            "width": {
             "type": "number",
             "description": "Outline width in pixels. Default: `3`.",
             "default": 3
            },
            "color": {
             "type": "string",
             "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
             "default": "auto"
            },
            "opacity": {
             "type": "number",
             "description": "Outline opacity (0 to 1). Default: `0.92`.",
             "default": 0.92
            },
            "blur": {
             "type": "number",
             "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
             "default": 0
            }
           },
           "additionalProperties": false,
           "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
          },
          "pill": {
           "type": "object",
           "properties": {
            "fill": {
             "type": "string",
             "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
             "default": "auto"
            },
            "opacity": {
             "type": "number",
             "description": "Box opacity (0 to 1). Default: `0.9`.",
             "default": 0.9
            },
            "radius": {
             "type": "number",
             "description": "Corner radius in pixels. Default: `4`.",
             "default": 4
            },
            "padding": {
             "anyOf": [
              {
               "type": "number"
              },
              {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 2,
               "maxItems": 2
              }
             ],
             "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
             "default": [
              1,
              4
             ]
            },
            "stroke": {
             "type": "string",
             "description": "Outline colour of the box. Default: `'none'`.",
             "default": "none"
            },
            "strokeWidth": {
             "type": "number",
             "description": "Outline width in pixels. Default: `1`.",
             "default": 1
            },
            "offset": {
             "type": "array",
             "prefixItems": [
              {
               "type": "number"
              },
              {
               "type": "number"
              }
             ],
             "minItems": 2,
             "maxItems": 2,
             "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
             "default": [
              0,
              0
             ]
            }
           },
           "additionalProperties": false,
           "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
          },
          "shadow": {
           "anyOf": [
            {
             "type": "boolean"
            },
            {
             "type": "object",
             "properties": {
              "dx": {
               "type": "number",
               "description": "Horizontal shadow offset in pixels. Default: `0`.",
               "default": 0
              },
              "dy": {
               "type": "number",
               "description": "Vertical shadow offset in pixels. Default: `1`.",
               "default": 1
              },
              "blur": {
               "type": "number",
               "description": "Shadow blur in pixels. Default: `2`.",
               "default": 2
              },
              "color": {
               "type": "string",
               "description": "Shadow colour. Default: `'#000000'`.",
               "default": "#000000"
              },
              "opacity": {
               "type": "number",
               "description": "Shadow opacity (0 to 1). Default: `0.35`.",
               "default": 0.35
              }
             },
             "additionalProperties": false
            }
           ],
           "description": "drop shadow on the pill (on the text in halo mode)"
          },
          "raise": {
           "type": "boolean",
           "description": "axis labels sitting on marks are moved above the series (default true)"
          },
          "each": {
           "x-wcc-type": "function",
           "description": "per label: return an override (or 'none') for this one label; called only when set"
          }
         },
         "additionalProperties": false
        }
       ],
       "description": "West Coast Charts: halo / pill / auto-contrast where labels overlap marks (features/readability)"
      },
      "show": {
       "type": "boolean",
       "description": "Shows the labels. Default: `true`.",
       "default": true
      },
      "showDuplicates": {
       "type": "boolean",
       "description": "Keeps labels that repeat the text of the previous one. Default: `false`.",
       "default": false
      },
      "minWidth": {
       "type": "number",
       "description": "Minimum width in pixels reserved for the labels. Default: `0`.",
       "default": 0
      },
      "maxWidth": {
       "type": "number",
       "description": "Maximum width in pixels the labels may take; longer ones are cut. Default: `160`.",
       "default": 160
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the labels horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the labels vertically. Default: `0`.",
       "default": 0
      },
      "rotate": {
       "type": "number",
       "description": "Rotation of the labels in degrees. Default: `0`.",
       "default": 0
      },
      "align": {
       "type": "string",
       "enum": [
        "right",
        "left",
        "center"
       ],
       "description": "Horizontal alignment of the labels: 'left', 'center' or 'right'."
      },
      "padding": {
       "type": "number",
       "description": "Space in pixels between the labels and the plot. Default: `20`.",
       "default": 20
      },
      "style": {
       "type": "object",
       "properties": {
        "colors": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "array",
           "items": {
            "type": "string"
           }
          }
         ],
         "description": "Label colour; an array gives one colour per label. Empty uses `chart.foreColor`. Default:\n`[]`.",
         "default": []
        },
        "fontSize": {
         "type": "string",
         "description": "Font size of the labels. Default: `'11px'`.",
         "default": "11px"
        },
        "fontWeight": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Font weight of the labels. Default: `400`.",
         "default": 400
        },
        "fontFamily": {
         "type": "string",
         "description": "Font family of the labels; not set uses `chart.fontFamily`."
        },
        "cssClass": {
         "type": "string",
         "description": "CSS class added to every label element. Default: `''`.",
         "default": ""
        }
       },
       "additionalProperties": false,
       "description": "Text style of the labels."
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Function that returns the label text from the value."
      }
     },
     "additionalProperties": false,
     "description": "The value labels of the axis."
    },
    "axisBorder": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws the axis line. Default: `false`.",
       "default": false
      },
      "color": {
       "type": "string",
       "description": "Colour of the axis line. Default: `'#e0e0e0'`.",
       "default": "#e0e0e0"
      },
      "width": {
       "type": "number",
       "description": "Width of the axis line in pixels. Default: `1`.",
       "default": 1
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the axis line horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the axis line vertically. Default: `0`.",
       "default": 0
      }
     },
     "additionalProperties": false,
     "description": "The vertical axis line."
    },
    "axisTicks": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws the tick marks. Default: `false`.",
       "default": false
      },
      "color": {
       "type": "string",
       "description": "Colour of the tick marks. Default: `'#e0e0e0'`.",
       "default": "#e0e0e0"
      },
      "width": {
       "type": "number",
       "description": "Length of the tick marks in pixels. Default: `6`.",
       "default": 6
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the tick marks horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the tick marks vertically. Default: `0`.",
       "default": 0
      }
     },
     "additionalProperties": false,
     "description": "Short tick marks next to the axis line."
    },
    "title": {
     "type": "object",
     "properties": {
      "text": {
       "type": "string",
       "description": "The title text; not set draws no title."
      },
      "rotate": {
       "type": "number",
       "description": "Rotation of the title in degrees. Default: `-90`.",
       "default": -90
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the title horizontally. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the title vertically. Default: `0`.",
       "default": 0
      },
      "style": {
       "type": "object",
       "properties": {
        "color": {
         "type": "string",
         "description": "Title colour; not set uses `chart.foreColor`."
        },
        "fontSize": {
         "type": "string",
         "description": "Title font size. Default: `'11px'`.",
         "default": "11px"
        },
        "fontWeight": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Title font weight. Default: `900`.",
         "default": 900
        },
        "fontFamily": {
         "type": "string",
         "description": "Title font family."
        },
        "cssClass": {
         "type": "string",
         "description": "CSS class added to the title element. Default: `''`.",
         "default": ""
        }
       },
       "additionalProperties": false,
       "description": "Text style of the title."
      }
     },
     "additionalProperties": false,
     "description": "Title text of the axis."
    },
    "crosshairs": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the y crosshair. Default: `true`.",
       "default": true
      },
      "position": {
       "type": "string",
       "description": "'front' draws it above the series, 'back' behind them. Default: `'front'`.",
       "default": "front"
      },
      "stroke": {
       "type": "object",
       "properties": {
        "color": {
         "type": "string",
         "description": "Line colour. Default: `'#b6b6b6'`.",
         "default": "#b6b6b6"
        },
        "width": {
         "type": "number",
         "description": "Line width in pixels. Default: `1`.",
         "default": 1
        },
        "dashArray": {
         "type": "number",
         "description": "Dash length in pixels; 0 draws a solid line. Default: `0`.",
         "default": 0
        }
       },
       "additionalProperties": false,
       "description": "Line of the y crosshair."
      }
     },
     "additionalProperties": false,
     "description": "Horizontal line that follows the hovered value."
    },
    "tooltip": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Shows the y-axis tooltip. Default: `false`.",
       "default": false
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the y-axis tooltip horizontally. Default: `0`.",
       "default": 0
      }
     },
     "additionalProperties": false,
     "description": "Small box on the y axis that shows the hovered value."
    }
   },
   "additionalProperties": false
  },
  "ImageAnnotations": {
   "type": "object",
   "properties": {
    "path": {
     "type": "string",
     "description": "Image URL: http(s), a relative path or a data:image URI; other schemes are dropped."
    },
    "x": {
     "type": "number",
     "description": "Horizontal position in pixels from the left of the chart SVG. Default: `0`.",
     "default": 0
    },
    "y": {
     "type": "number",
     "description": "Vertical position in pixels from the top of the chart SVG. Default: `0`.",
     "default": 0
    },
    "width": {
     "type": "number",
     "description": "Image width in pixels. Default: `20`.",
     "default": 20
    },
    "height": {
     "type": "number",
     "description": "Image height in pixels. Default: `20`.",
     "default": 20
    }
   },
   "additionalProperties": false
  },
  "PointAnnotations": {
   "type": "object",
   "properties": {
    "scope": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       }
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "trellis: panel key(s) or a function of the key; the annotation is drawn only on matching panels."
    },
    "wcc": {
     "type": "object",
     "properties": {
      "tooltip": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "Tooltip text shown on hover and focus, or a function of the annotation."
      }
     },
     "additionalProperties": false,
     "description": "West Coast Charts: annotation extras."
    },
    "id": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Identifier added as a CSS class to the marker and label; also the key for removing the\nannotation later."
    },
    "x": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "X position of the point: a category, number or timestamp matching `xaxis.type`. Default: `0`.",
     "default": 0
    },
    "y": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "number"
      }
     ],
     "description": "Y value of the point. Default: `null`.",
     "default": null
    },
    "yAxisIndex": {
     "type": "number",
     "description": "Index of the y axis whose scale positions the point. Default: `0`.",
     "default": 0
    },
    "seriesIndex": {
     "type": "number",
     "description": "Series the point belongs to; on horizontal bar charts it moves the point onto that series' bar."
    },
    "mouseEnter": {
     "x-wcc-type": "Function",
     "description": "Called with the annotation object when the pointer enters the marker."
    },
    "mouseLeave": {
     "x-wcc-type": "Function",
     "description": "Called with the annotation object when the pointer leaves the marker."
    },
    "click": {
     "x-wcc-type": "Function",
     "description": "Called with the annotation object when the marker is clicked."
    },
    "marker": {
     "type": "object",
     "properties": {
      "size": {
       "type": "number",
       "description": "Marker radius in pixels; 0 hides the marker. Default: `4`.",
       "default": 4
      },
      "fillColor": {
       "type": "string",
       "description": "Fill colour of the marker. Default: `'#fff'`.",
       "default": "#fff"
      },
      "strokeColor": {
       "type": "string",
       "description": "Outline colour of the marker. Default: `'#333'`.",
       "default": "#333"
      },
      "strokeWidth": {
       "type": "number",
       "description": "Outline width of the marker in pixels. Default: `2`.",
       "default": 2
      },
      "shape": {
       "type": "string",
       "description": "Marker shape, as in `markers.shape`. Default: `'circle'`.",
       "default": "circle"
      },
      "offsetX": {
       "type": "number",
       "description": "Horizontal shift of the marker in pixels. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Vertical shift of the marker in pixels. Default: `0`.",
       "default": 0
      },
      "cssClass": {
       "type": "string",
       "description": "Extra CSS class added to the marker. Default: `''`.",
       "default": ""
      }
     },
     "additionalProperties": false,
     "description": "Marker drawn at the point."
    },
    "label": {
     "$ref": "#/$defs/AnnotationLabel",
     "description": "Text label attached to the point."
    },
    "image": {
     "type": "object",
     "properties": {
      "path": {
       "type": "string",
       "description": "Image URL: http(s), a relative path or a data:image URI; other schemes are dropped."
      },
      "width": {
       "type": "number",
       "description": "Image width in pixels. Default: `20`.",
       "default": 20
      },
      "height": {
       "type": "number",
       "description": "Image height in pixels. Default: `20`.",
       "default": 20
      },
      "offsetX": {
       "type": "number",
       "description": "Horizontal shift of the image in pixels. Default: `0`.",
       "default": 0
      },
      "offsetY": {
       "type": "number",
       "description": "Vertical shift of the image in pixels. Default: `0`.",
       "default": 0
      }
     },
     "additionalProperties": false,
     "description": "Image drawn at the point."
    }
   },
   "additionalProperties": false
  },
  "RadialChordGroup": {
   "type": "object",
   "properties": {
    "id": {
     "type": "string",
     "description": "Group id used in the flows."
    },
    "name": {
     "type": "string",
     "description": "Shown name; not set uses the id."
    },
    "color": {
     "type": "string",
     "description": "Group colour."
    },
    "values": {
     "type": "array",
     "items": {
      "type": "number"
     },
     "description": "per-group values (shown in its tooltip)"
    },
    "link": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       }
      }
     ],
     "description": "categories (names or indices) of the column ring this group links to (overrides link.map)"
    }
   },
   "required": [
    "id"
   ],
   "additionalProperties": false
  },
  "RadialColumnEncode": {
   "type": "object",
   "properties": {
    "angle": {
     "type": "string",
     "description": "name of the angular dimension for the guide (default: xaxis.title.text or 'Category')"
    },
    "length": {
     "type": "string",
     "description": "bar length: 'value' (default) or a datum field"
    },
    "color": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "object",
       "properties": {
        "field": {
         "type": "string",
         "description": "Datum field of the metric (`datum.meta[field]` or `datum[field]`)."
        },
        "values": {
         "type": "array",
         "items": {
          "anyOf": [
           {
            "type": "null"
           },
           {
            "type": "number"
           }
          ]
         },
         "description": "One value per category instead of a field."
        },
        "name": {
         "type": "string",
         "description": "legend / tooltip name (default: the field)"
        },
        "unit": {
         "type": "string",
         "description": "appended to values: '%' sticks, other units get a space"
        },
        "decimals": {
         "type": "number",
         "description": "Decimals of the shown values; not set uses 0 from 100, 1 from 10, else 2."
        },
        "format": {
         "x-wcc-type": "function",
         "description": "`(value) => string` for the shown values (wins over `decimals` and `unit`)."
        },
        "legend": {
         "type": "boolean",
         "description": "false: no key in the strip under the ring (default true)"
        },
        "show": {
         "type": "boolean",
         "description": "`false` switches the channel off. Default: `true`.",
         "default": true
        },
        "scale": {
         "type": "string",
         "enum": [
          "diverging",
          "sequential"
         ],
         "description": "`'sequential'` (low to high) or `'diverging'` around `mid`. Default: `'sequential'`.",
         "default": "sequential"
        },
        "domain": {
         "type": "array",
         "items": {
          "type": "number"
         },
         "description": "[lo, hi] or [lo, mid, hi]; default: data extent (diverging: symmetric around mid)"
        },
        "mid": {
         "type": "number",
         "description": "diverging centre (default 0)"
        },
        "stops": {
         "type": "array",
         "items": {
          "type": "string"
         },
         "description": "Colour stops; not set uses `['#2dd4bf', '#facc15', '#f43f5e']` (diverging: blue, a neutral\ntone, orange)."
        },
        "reverse": {
         "type": "boolean",
         "description": "Reverses the colour stops. Default: `false`.",
         "default": false
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "bar colour = a separate metric"
    },
    "delta": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "object",
       "properties": {
        "field": {
         "type": "string",
         "description": "Datum field of the metric (`datum.meta[field]` or `datum[field]`)."
        },
        "values": {
         "type": "array",
         "items": {
          "anyOf": [
           {
            "type": "null"
           },
           {
            "type": "number"
           }
          ]
         },
         "description": "One value per category instead of a field."
        },
        "name": {
         "type": "string",
         "description": "legend / tooltip name (default: the field)"
        },
        "unit": {
         "type": "string",
         "description": "appended to values: '%' sticks, other units get a space"
        },
        "decimals": {
         "type": "number",
         "description": "Decimals of the shown values; not set uses 0 from 100, 1 from 10, else 2."
        },
        "format": {
         "x-wcc-type": "function",
         "description": "`(value) => string` for the shown values (wins over `decimals` and `unit`)."
        },
        "legend": {
         "type": "boolean",
         "description": "false: no key in the strip under the ring (default true)"
        },
        "show": {
         "type": "boolean",
         "description": "`false` switches the channel off. Default: `true`.",
         "default": true
        },
        "style": {
         "type": "string",
         "enum": [
          "band",
          "ticks",
          "bars"
         ],
         "description": "band: thin coloured ring; ticks: marks at the bar tips; bars: signed mini bars (out = up, in = down)"
        },
        "colors": {
         "type": "object",
         "properties": {
          "up": {
           "type": "string",
           "description": "Colour of increases. Default: `'#22c55e'`.",
           "default": "#22c55e"
          },
          "down": {
           "type": "string",
           "description": "Colour of decreases. Default: `'#f43f5e'`.",
           "default": "#f43f5e"
          }
         },
         "additionalProperties": false,
         "description": "Colours of increases and decreases."
        },
        "max": {
         "type": "number",
         "description": "|value| of full intensity / length (default: largest |value|)"
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "change vs a previous period outside the bars"
    },
    "guide": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "`false` hides the guide button. Default: `true`.",
         "default": true
        },
        "open": {
         "anyOf": [
          {
           "const": "always"
          },
          {
           "type": "boolean"
          }
         ],
         "description": "start open (true: only when the chart is >= 560 px wide; 'always')"
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "'?' button with a 'how to read' panel listing every bound channel"
    }
   },
   "additionalProperties": false
  },
  "RadialColumnLayer": {
   "type": "object",
   "properties": {
    "type": {
     "type": "string",
     "enum": [
      "pie",
      "donut",
      "radialBar",
      "heatmap",
      "polarArea",
      "gauge",
      "sunburst",
      "chord",
      "matrix",
      "arc",
      "nestedDonut",
      "goals",
      "wave",
      "incident",
      "bands",
      "trace",
      "span",
      "vitalsNow"
     ],
     "description": "'radialBar' is an alias of 'arc'; 'chord' is best as the innermost layer (its ribbons fill the centre)"
    },
    "name": {
     "type": "string",
     "description": "Layer name (legend, tooltip, centre label of a gauge)."
    },
    "data": {
     "anyOf": [
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "number"
         },
         {
          "type": "array",
          "prefixItems": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ],
          "minItems": 2,
          "maxItems": 2
         },
         {
          "$ref": "#/$defs/RadialLayerDatumObject"
         }
        ]
       }
      },
      {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "name": {
          "type": "string",
          "description": "Ring name."
         },
         "data": {
          "type": "array",
          "items": {
           "anyOf": [
            {
             "type": "null"
            },
            {
             "type": "number"
            },
            {
             "type": "array",
             "prefixItems": [
              {
               "type": "string"
              },
              {
               "type": "number"
              }
             ],
             "minItems": 2,
             "maxItems": 2
            },
            {
             "$ref": "#/$defs/RadialLayerDatumObject"
            }
           ]
          },
          "description": "Segments or cells of the ring (inner first)."
         }
        },
        "required": [
         "data"
        ],
        "additionalProperties": false
       }
      },
      {
       "type": "array",
       "items": {
        "type": "array",
        "items": {
         "anyOf": [
          {
           "type": "null"
          },
          {
           "type": "number"
          }
         ]
        }
       }
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "array",
          "prefixItems": [
           {
            "type": "string"
           },
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ],
          "minItems": 3,
          "maxItems": 3
         },
         {
          "type": "object",
          "properties": {
           "from": {
            "type": "string",
            "description": "Source group id."
           },
           "to": {
            "type": "string",
            "description": "Target group id."
           },
           "value": {
            "type": "number",
            "description": "Size of the flow."
           },
           "color": {
            "type": "string",
            "description": "Ribbon colour of this flow."
           }
          },
          "required": [
           "from",
           "to",
           "value"
          ],
          "additionalProperties": false
         }
        ]
       }
      },
      {
       "type": "array",
       "items": {
        "$ref": "#/$defs/RadialWaveSeries"
       }
      },
      {
       "type": "array",
       "items": {
        "type": "array",
        "items": {
         "anyOf": [
          {
           "type": "null"
          },
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ]
        }
       }
      },
      {
       "type": "array",
       "items": {
        "$ref": "#/$defs/RadialMatrixCell"
       }
      },
      {
       "type": "array",
       "items": {
        "$ref": "#/$defs/RadialIncident"
       }
      }
     ],
     "description": "pie/donut/arc/polarArea: segments; nestedDonut and heatmap: rings [{ name, data }] or number[][] (innermost first,\nheatmap cells may be null); sunburst: a node tree; chord: flows [from, to, value] or { from, to, value };\nwave: rows RadialWaveSeries[] (or one plain number array = one row)\nmatrix: rows × cols values or status names, flows [row, col, value], or RadialMatrixCell objects\nincident (west-coast-charts/layers/quint): RadialIncident windows, a wedge across every ring each"
    },
    "series": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "take the data from config.series (index or name) instead; that series leaves the column ring"
    },
    "labels": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "segment names for plain number data; wave: point labels, one per point (e.g. '14:00 Tue') or one per sector point ('14:00', shown as 'Tue 14:00')"
    },
    "thickness": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "ring thickness: px, '30%' of the available radius, or a fraction (0..1)"
    },
    "gap": {
     "type": "number",
     "description": "px between this layer and the one inside it (default 6)"
    },
    "ringGap": {
     "type": "number",
     "description": "px between the rings of a nestedDonut / sunburst / arc layer (default 2)"
    },
    "padding": {
     "type": "number",
     "description": "constant px gap between neighbouring segments"
    },
    "corner": {
     "type": "number",
     "description": "corner radius of segment ends, px"
    },
    "colors": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Own palette of the layer; heatmap: two or more colours are the ramp stops, low to high."
    },
    "colorBy": {
     "const": "spectrum",
     "description": "colour segments from the column ring's spectrum by angle"
    },
    "legend": {
     "type": "boolean",
     "description": "keep this layer's segments out of the legend"
    },
    "link": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "none",
        "auto",
        "map",
        "category",
        "angle"
       ]
      },
      {
       "type": "boolean"
      },
      {
       "$ref": "#/$defs/RadialColumnLink"
      }
     ],
     "description": "link to the column ring for this layer: false = none, a mode, or options overriding plotOptions.radialColumn.link"
    },
    "align": {
     "type": "boolean",
     "description": "shorthand for link.align"
    },
    "trackColor": {
     "type": "string",
     "description": "Track colour of arc, goals and gauge layers; not set uses a faint text tone (goals: a tone of\nthe ring colour)."
    },
    "startAngle": {
     "type": "number",
     "description": "degrees, 0 = 12 o'clock, clockwise; default: the chart's range"
    },
    "endAngle": {
     "type": "number",
     "description": "End angle in degrees (same convention as `startAngle`); not set uses the chart's range."
    },
    "min": {
     "type": "number",
     "description": "arc layers: value range of a full arc (default 0..100; per point via datum.max); wave: base of the height scale (default min(0, data))"
    },
    "max": {
     "type": "number",
     "description": "Arc layers: value of a full arc. Default: `100`. Wave: top of the height scale (default: the data, envelopes and forecasts rounded up to a nice tick).",
     "default": 100
    },
    "color": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "$ref": "#/$defs/RadialMatrixScale"
      }
     ],
     "description": "heatmap / matrix: base colour of the default ramp (surface tone -> colour -> towards the text colour); colors (2+)\noverrides the ramp. matrix (value mode) also takes a colour scale."
    },
    "groups": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RadialChordGroup"
     },
     "description": "chord: group definitions (order, names, colours, linked categories)"
    },
    "matrix": {
     "type": "array",
     "items": {
      "type": "array",
      "items": {
       "type": "number"
      }
     },
     "description": "chord: a square flow matrix instead of data; row = source, column = target (with labels)"
    },
    "directed": {
     "type": "boolean",
     "description": "chord: directed flows give each end its own share (A->B and B->A differ)"
    },
    "sort": {
     "type": "string",
     "enum": [
      "none",
      "asc",
      "desc"
     ],
     "description": "chord: order of the groups around the ring (default: as given)"
    },
    "ringWidth": {
     "type": "number",
     "description": "chord: px width of the group arcs (default: the layer thickness)"
    },
    "ribbon": {
     "type": "object",
     "properties": {
      "opacity": {
       "type": "number",
       "description": "Ribbon opacity; not set uses 0.52 (0.6 in dark mode)."
      },
      "colorMode": {
       "type": "string",
       "enum": [
        "source",
        "target",
        "gradient"
       ],
       "description": "Ribbon colour from the `'source'` group, the `'target'` group, or a `'gradient'` between both. Default: `'source'`.",
       "default": "source"
      },
      "padding": {
       "type": "number",
       "description": "Gap between the group arcs and the ribbon ends in px. Default: `2`.",
       "default": 2
      }
     },
     "additionalProperties": false,
     "description": "chord ribbons"
    },
    "target": {
     "type": "number",
     "description": "goals: default target of every ring (datum target/max wins; default 100)"
    },
    "maxLaps": {
     "type": "number",
     "description": "goals: laps drawn past 100 % (default 2, i.e. up to 300 %)"
    },
    "ringLabels": {
     "type": "boolean",
     "description": "curved labels on the segments: goals from the ring start (default true); any other layer centred on each segment, upright in the lower half (default false)"
    },
    "ringTitles": {
     "type": "boolean",
     "description": "incident: name the heatmap rings (curved, in the gap outside each ring, at 12 o'clock) and add their colour scales to the key under the ring (default true)"
    },
    "legendTitle": {
     "type": "string",
     "description": "header of this layer's entries in a right-hand legend (e.g. 'Regions'); entries of consecutive layers sharing a title form one group"
    },
    "rows": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/RadialMatrixHeader"
       },
       {
        "$ref": "#/$defs/RadialVitalsRow"
       }
      ]
     },
     "description": "matrix: row headers (ids, or definitions with keys / link); default: the ids used in flow data"
    },
    "cols": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/RadialMatrixHeader"
       }
      ]
     },
     "description": "matrix: column headers; default: the rows (square adjacency matrix)"
    },
    "statuses": {
     "x-wcc-type": "__type",
     "description": "matrix: adds or overrides statuses (built in: ok, info, warn, crit, unknown)"
    },
    "headers": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "`false` hides the headers. Default: `true`.",
         "default": true
        },
        "fontSize": {
         "type": "number",
         "description": "Largest header font size in px; it shrinks to 9 px before labels are cut. Default: theme font size − 1."
        },
        "readability": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "none",
            "halo",
            "pill",
            "auto",
            "hide"
           ]
          },
          {
           "type": "boolean"
          },
          {
           "type": "object",
           "properties": {
            "mode": {
             "type": "string",
             "enum": [
              "none",
              "halo",
              "pill",
              "auto",
              "hide"
             ],
             "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
            },
            "fallback": {
             "type": "string",
             "enum": [
              "halo",
              "pill",
              "hide"
             ],
             "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
            },
            "enabled": {
             "type": "boolean",
             "description": "false switches the treatment off for this label kind"
            },
            "contrast": {
             "type": "boolean",
             "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
            },
            "minRatio": {
             "type": "number",
             "description": "WCAG 2 contrast ratio to reach. Default 4.5"
            },
            "light": {
             "type": "string",
             "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
            },
            "dark": {
             "type": "string",
             "description": "Dark colour of the pair. Default: `'#111827'`.",
             "default": "#111827"
            },
            "background": {
             "type": "string",
             "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
            },
            "halo": {
             "type": "object",
             "properties": {
              "width": {
               "type": "number",
               "description": "Outline width in pixels. Default: `3`.",
               "default": 3
              },
              "color": {
               "type": "string",
               "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
               "default": "auto"
              },
              "opacity": {
               "type": "number",
               "description": "Outline opacity (0 to 1). Default: `0.92`.",
               "default": 0.92
              },
              "blur": {
               "type": "number",
               "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
               "default": 0
              }
             },
             "additionalProperties": false,
             "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
            },
            "pill": {
             "type": "object",
             "properties": {
              "fill": {
               "type": "string",
               "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
               "default": "auto"
              },
              "opacity": {
               "type": "number",
               "description": "Box opacity (0 to 1). Default: `0.9`.",
               "default": 0.9
              },
              "radius": {
               "type": "number",
               "description": "Corner radius in pixels. Default: `4`.",
               "default": 4
              },
              "padding": {
               "anyOf": [
                {
                 "type": "number"
                },
                {
                 "type": "array",
                 "prefixItems": [
                  {
                   "type": "number"
                  },
                  {
                   "type": "number"
                  }
                 ],
                 "minItems": 2,
                 "maxItems": 2
                }
               ],
               "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
               "default": [
                1,
                4
               ]
              },
              "stroke": {
               "type": "string",
               "description": "Outline colour of the box. Default: `'none'`.",
               "default": "none"
              },
              "strokeWidth": {
               "type": "number",
               "description": "Outline width in pixels. Default: `1`.",
               "default": 1
              },
              "offset": {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 2,
               "maxItems": 2,
               "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
               "default": [
                0,
                0
               ]
              }
             },
             "additionalProperties": false,
             "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
            },
            "shadow": {
             "anyOf": [
              {
               "type": "boolean"
              },
              {
               "type": "object",
               "properties": {
                "dx": {
                 "type": "number",
                 "description": "Horizontal shadow offset in pixels. Default: `0`.",
                 "default": 0
                },
                "dy": {
                 "type": "number",
                 "description": "Vertical shadow offset in pixels. Default: `1`.",
                 "default": 1
                },
                "blur": {
                 "type": "number",
                 "description": "Shadow blur in pixels. Default: `2`.",
                 "default": 2
                },
                "color": {
                 "type": "string",
                 "description": "Shadow colour. Default: `'#000000'`.",
                 "default": "#000000"
                },
                "opacity": {
                 "type": "number",
                 "description": "Shadow opacity (0 to 1). Default: `0.35`.",
                 "default": 0.35
                }
               },
               "additionalProperties": false
              }
             ],
             "description": "drop shadow on the pill (on the text in halo mode)"
            },
            "raise": {
             "type": "boolean",
             "description": "axis labels sitting on marks are moved above the series (default true)"
            },
            "each": {
             "x-wcc-type": "function",
             "description": "per label: return an override (or 'none') for this one label; called only when set"
            }
           },
           "additionalProperties": false
          }
         ],
         "description": "Label readability of the headers (explicit modes only, e.g. 'pill' / 'halo')."
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "matrix: row / column header labels (false hides them)"
    },
    "values": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "boolean"
      }
     ],
     "description": "matrix: print the value inside a cell ('auto': when it fits). Default: `'auto'`.",
     "default": "auto"
    },
    "minCell": {
     "type": "number",
     "description": "matrix: smallest cell in px before rows / columns are merged or dropped. Default: `6`.",
     "default": 6
    },
    "overflow": {
     "type": "string",
     "enum": [
      "truncate",
      "aggregate"
     ],
     "description": "matrix: rows / columns past minCell merge into one '+N' row / column ('aggregate'), or are dropped with a '+N' note ('truncate'). Default: `'aggregate'`.",
     "default": "aggregate"
    },
    "aggregate": {
     "type": "string",
     "enum": [
      "last",
      "sum",
      "max",
      "min",
      "mean",
      "median"
     ],
     "description": "matrix: how merged cells and row / column headers combine values (statuses: always the worst). Default: `'sum'`\n(header tooltip 'Total'); use 'max' / 'mean' / 'min' for non-additive cells such as latencies or rates ('Highest', 'Average', 'Lowest').",
     "default": "sum"
    },
    "inset": {
     "type": "number",
     "description": "matrix: px between the grid (with its headers) and the edge of the centre disc. Default: `6`.",
     "default": 6
    },
    "unit": {
     "type": "string",
     "description": "matrix: appended to values in cells, tooltip and table; heatmap: appended to the value in the slot tooltip"
    },
    "value": {
     "type": "number",
     "description": "gauge: the value (else data[0])"
    },
    "follow": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "gauge: take the latest value of this column series (name, index or true = first); it stays in the ring"
    },
    "bandsLow": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RadialVitalsBand"
     },
     "description": "Span lower-value bands. Missing keeps the generic shared fallback; choose a policy explicitly to avoid a warning."
    },
    "bandsLowPolicy": {
     "type": "string",
     "enum": [
      "high-only",
      "shared"
     ],
     "description": "Span classification when bandsLow is absent; generic span default is shared, VitalsClock defaults high-only."
    },
    "bands": {
     "anyOf": [
      {
       "type": "array",
       "items": {
        "$ref": "#/$defs/RadialVitalsBand"
       }
      },
      {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "to": {
          "type": "number",
          "description": "Upper value of the band (inclusive)."
         },
         "color": {
          "type": "string",
          "description": "Arc colour for values in the band."
         }
        },
        "required": [
         "to",
         "color"
        ],
        "additionalProperties": false
       }
      }
     ]
    },
    "formatter": {
     "x-wcc-type": "function",
     "description": "gauge: value formatter (centre, min/max ticks, tooltip)"
    },
    "center": {
     "type": "boolean",
     "description": "gauge: show the value in the chart centre (default true)"
    },
    "scale": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "linear",
        "log"
       ]
      },
      {
       "type": "boolean"
      }
     ],
     "description": "gauge: min/max labels at the ends of a partial arc (boolean, default true); heatmap: colour scale, 'log' spaces the ramp by ratio (positive values; default 'linear')"
    },
    "now": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "string"
      },
      {
       "type": "number"
      },
      {
       "type": "object",
       "properties": {
        "label": {
         "type": "string",
         "description": "Text of the tick. Default: `'now'`.",
         "default": "now"
        },
        "color": {
         "type": "string",
         "description": "Tick colour; not set uses the gauge colour."
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "gauge with follow: the 'now' tick over the newest slot (default true)"
    },
    "time": {
     "type": "object",
     "properties": {
      "start": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ]
      },
      "end": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ]
      }
     },
     "required": [
      "start",
      "end"
     ],
     "additionalProperties": false,
     "description": "trace / span / vitalsNow (layers/vitals): the window the ring shows, ms or ISO."
    },
    "upto": {
     "type": "number",
     "description": "bands / trace / span (layers/vitals): index of the current slot; later slots are \"no data yet\"."
    },
    "endLabel": {
     "type": "string",
     "description": "bands (layers/vitals): end label of the last slot (e.g. '24:00'); not set uses the last slot label."
    },
    "gapAfter": {
     "type": "number",
     "description": "trace / span (layers/vitals): a gap longer than this many minutes breaks the line. Default: 3 slots."
    },
    "alarms": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "from": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "to": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "label": {
        "type": "string"
       }
      },
      "required": [
       "from"
      ],
      "additionalProperties": false
     },
     "description": "vitalsNow (layers/vitals): caller alarm windows, drawn as wedges."
    },
    "status": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "name": {
        "type": "string"
       },
       "text": {
        "type": "string"
       },
       "ago": {
        "type": "number"
       },
       "stale": {
        "type": "boolean"
       }
      },
      "required": [
       "name",
       "text"
      ],
      "additionalProperties": false
     },
     "description": "vitalsNow (layers/vitals): last value per parameter in the strip under the ring."
    },
    "note": {
     "type": "string",
     "description": "vitalsNow (layers/vitals): a note in the strip, e.g. 'Demo data'."
    },
    "mode": {
     "type": "string",
     "enum": [
      "auto",
      "value",
      "ridge",
      "overlay",
      "stack",
      "status"
     ],
     "description": "wave: 'ridge' (default) staggers the rows in lanes that rise into the lane behind them; 'overlay' shares one translucent band; 'stack' piles the rows.\nmatrix: 'status' colours cells by severity with patterns; 'auto' (default) = status once any cell has one; 'value' = value scale."
    },
    "overlap": {
     "type": "number",
     "description": "wave ridge: how far a wave may rise into the lanes behind it, in lane steps (default 0.8; 0 = no overlap)"
    },
    "sectors": {
     "anyOf": [
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "$ref": "#/$defs/RadialWaveSector"
         }
        ]
       }
      }
     ],
     "description": "wave: the equal sectors (cycles) of the ring - a count, or names / objects in order (default 1)"
    },
    "sectorLabels": {
     "type": "boolean",
     "description": "wave: curved sector names on a band at the inner edge (default true when there are 2+ sectors and room)"
    },
    "depth": {
     "type": "number",
     "description": "wave: shading from crest to base, 0 = flat .. 1 = deep (default 0.55)"
    },
    "curve": {
     "type": "string",
     "enum": [
      "linear",
      "smooth"
     ],
     "description": "wave: 'smooth' monotone cubic that never overshoots the data (default) or 'linear'"
    },
    "anomalies": {
     "anyOf": [
      {
       "const": false
      },
      {
       "type": "array",
       "items": {
        "$ref": "#/$defs/RadialWaveAnomaly"
       }
      },
      {
       "type": "object",
       "properties": {
        "color": {
         "type": "string"
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "wave: anomaly spikes. Default: points outside their envelope. A list adds or relabels points; false = none; { color } recolours the automatic ones"
    }
   },
   "required": [
    "type"
   ],
   "additionalProperties": false
  },
  "RadialColumnLink": {
   "type": "object",
   "properties": {
    "mode": {
     "type": "string",
     "enum": [
      "none",
      "auto",
      "map",
      "category",
      "angle"
     ],
     "description": "auto (default): a datum's own link, else matching category names, else the angle span"
    },
    "map": {
     "anyOf": [
      {
       "x-wcc-type": "function"
      },
      {
       "x-wcc-type": "__type"
      }
     ],
     "description": "map mode: a function or an object keyed by 'A › B' path or name; values are category indices or names"
    },
    "interaction": {
     "type": "string",
     "enum": [
      "filter",
      "both",
      "highlight"
     ],
     "description": "highlight on hover, filter (cross-filter / values) on click, or both. Default 'highlight'"
    },
    "bidirectional": {
     "type": "boolean",
     "description": "hovering a bar also lights its segments (default true)"
    },
    "align": {
     "type": "boolean",
     "description": "segments span exactly the angle of their linked bars (default false)"
    },
    "indicator": {
     "type": "boolean",
     "description": "bracket arc on the outer edge over the linked bars (default true)"
    },
    "unit": {
     "type": "string",
     "description": "what a category is, for tooltips and announcements ('18 of 72 time slots'). Default 'categories'.\nName the real unit: categories that combine several things (service × day) are 'service-days', not 'days'."
    },
    "basis": {
     "type": "string",
     "description": "how the categories are composed, appended in brackets ('18 of 140 service-days (10 services × 14 days)'). Default: none"
    }
   },
   "additionalProperties": false
  },
  "RadialColumnOptions": {
   "type": "object",
   "properties": {
    "readabilityWarnings": {
     "type": "boolean",
     "description": "Warn once if inner rings are thinner than 8 px or heat cells below 2 px per slot. No values/layers are removed. Default: `true`.",
     "default": true
    },
    "aggregate": {
     "type": "string",
     "enum": [
      "none",
      "sum",
      "max",
      "min",
      "mean"
     ],
     "description": "how the column values combine in the centre, the generated description, tooltip footers and the filter note.\n'sum' (default) adds them into a Total — right for counts and amounts only. Use 'max' / 'min' for\nlatencies and percentiles ('Highest p95 latency (ms): 412 (Matching · 20:00)'), 'mean' for rates,\npercentages and scores, 'none' to name no combined number at all."
    },
    "link": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "none",
        "auto",
        "map",
        "category",
        "angle"
       ]
      },
      {
       "$ref": "#/$defs/RadialColumnLink"
      }
     ],
     "description": "links between inner layers and the column ring (a mode string or options)"
    },
    "encode": {
     "$ref": "#/$defs/RadialColumnEncode",
     "description": "bind colour / delta / length to separate metrics"
    },
    "markers": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "at": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ],
        "description": "Slot of the mark: category index or name."
       },
       "label": {
        "type": "string",
        "description": "Text of the tooltip row."
       },
       "kind": {
        "type": "string",
        "description": "Name of the tooltip row. Default: `'Event'`.",
        "default": "Event"
       },
       "color": {
        "type": "string",
        "description": "Mark colour; not set uses the text colour."
       },
       "shape": {
        "type": "string",
        "enum": [
         "diamond",
         "dot"
        ],
        "description": "`'dot'` or `'diamond'`. Default: `'diamond'`.",
        "default": "diamond"
       }
      },
      "required": [
       "at"
      ],
      "additionalProperties": false
     },
     "description": "rim marks (deploys, pipeline runs, incidents): a small glyph outside the bars at a slot, a tooltip row on that slot and a guide row"
    },
    "startAngle": {
     "type": "number",
     "description": "degrees, 0 = 12 o'clock, clockwise; a partial range gives a gauge"
    },
    "endAngle": {
     "type": "number",
     "description": "End of the range in degrees (same convention as `startAngle`). Default: `360`.",
     "default": 360
    },
    "innerRadius": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "base radius of the bars: 'auto', px, '40%' or a fraction of the outer radius"
    },
    "barPadding": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "number"
      }
     ],
     "description": "gap between neighbouring slots: 'auto' or a fraction of the slot (0..0.9)"
    },
    "groupPadding": {
     "type": "number",
     "description": "gap between the bars of one slot when grouped (fraction)"
    },
    "stacked": {
     "type": "boolean",
     "description": "stack series outward (falls back to chart.stacked)"
    },
    "stackGap": {
     "type": "number",
     "description": "Gap between stacked segments in px. Default: `1`.",
     "default": 1
    },
    "rounded": {
     "type": "boolean",
     "description": "rounded bar ends"
    },
    "fill": {
     "type": "object",
     "properties": {
      "type": {
       "type": "string",
       "enum": [
        "auto",
        "series",
        "value",
        "spectrum"
       ],
       "description": "auto: spectrum for one uncoloured series, else series colours"
      },
      "stops": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "gradient stops (spectrum by angle, value by magnitude)"
      },
      "ranges": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "from": {
          "type": "number",
          "description": "Lowest value of the range (inclusive)."
         },
         "to": {
          "type": "number",
          "description": "Highest value of the range (inclusive)."
         },
         "color": {
          "type": "string",
          "description": "Colour of bars in the range."
         }
        },
        "required": [
         "from",
         "to",
         "color"
        ],
        "additionalProperties": false
       },
       "description": "type 'value': fixed colours for value ranges (inclusive); values outside every range use the stops"
      },
      "fade": {
       "type": "number",
       "description": "inner fade of the bars, 0..1 (0 = off)"
      }
     },
     "additionalProperties": false,
     "description": "Bar colours."
    },
    "track": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the track. Default: `false`.",
       "default": false
      },
      "color": {
       "type": "string",
       "description": "Track colour; not set uses a faint text tone."
      }
     },
     "additionalProperties": false,
     "description": "Background track behind the bars."
    },
    "baseline": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws the ring at value 0. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Zero ring."
    },
    "valueAxis": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the grid rings and value labels. Default: `true`.",
       "default": true
      },
      "min": {
       "type": "number",
       "description": "Fixed lower end; not set uses the data."
      },
      "max": {
       "type": "number",
       "description": "Fixed upper end; not set uses the data."
      },
      "tickAmount": {
       "type": "number",
       "description": "Target number of tick steps. Default: `4`.",
       "default": 4
      },
      "nice": {
       "type": "boolean",
       "description": "round free ends to the tightest whole tick step (3-6 ticks); false = data extent. Default true"
      },
      "rings": {
       "type": "boolean",
       "description": "Draws the grid rings at the ticks (the value labels sit on them). Default: `true`.",
       "default": true
      },
      "labels": {
       "type": "object",
       "properties": {
        "show": {
         "type": "boolean",
         "description": "Shows the tick labels. Default: `true`.",
         "default": true
        },
        "formatter": {
         "x-wcc-type": "function",
         "description": "`(value, { w }) => string`; not set uses a compact number."
        },
        "readability": {
         "anyOf": [
          {
           "type": "string",
           "enum": [
            "none",
            "halo",
            "pill",
            "auto",
            "hide"
           ]
          },
          {
           "type": "boolean"
          },
          {
           "type": "object",
           "properties": {
            "mode": {
             "type": "string",
             "enum": [
              "none",
              "halo",
              "pill",
              "auto",
              "hide"
             ],
             "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
            },
            "fallback": {
             "type": "string",
             "enum": [
              "halo",
              "pill",
              "hide"
             ],
             "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
            },
            "enabled": {
             "type": "boolean",
             "description": "false switches the treatment off for this label kind"
            },
            "contrast": {
             "type": "boolean",
             "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
            },
            "minRatio": {
             "type": "number",
             "description": "WCAG 2 contrast ratio to reach. Default 4.5"
            },
            "light": {
             "type": "string",
             "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
            },
            "dark": {
             "type": "string",
             "description": "Dark colour of the pair. Default: `'#111827'`.",
             "default": "#111827"
            },
            "background": {
             "type": "string",
             "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
            },
            "halo": {
             "type": "object",
             "properties": {
              "width": {
               "type": "number",
               "description": "Outline width in pixels. Default: `3`.",
               "default": 3
              },
              "color": {
               "type": "string",
               "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
               "default": "auto"
              },
              "opacity": {
               "type": "number",
               "description": "Outline opacity (0 to 1). Default: `0.92`.",
               "default": 0.92
              },
              "blur": {
               "type": "number",
               "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
               "default": 0
              }
             },
             "additionalProperties": false,
             "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
            },
            "pill": {
             "type": "object",
             "properties": {
              "fill": {
               "type": "string",
               "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
               "default": "auto"
              },
              "opacity": {
               "type": "number",
               "description": "Box opacity (0 to 1). Default: `0.9`.",
               "default": 0.9
              },
              "radius": {
               "type": "number",
               "description": "Corner radius in pixels. Default: `4`.",
               "default": 4
              },
              "padding": {
               "anyOf": [
                {
                 "type": "number"
                },
                {
                 "type": "array",
                 "prefixItems": [
                  {
                   "type": "number"
                  },
                  {
                   "type": "number"
                  }
                 ],
                 "minItems": 2,
                 "maxItems": 2
                }
               ],
               "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
               "default": [
                1,
                4
               ]
              },
              "stroke": {
               "type": "string",
               "description": "Outline colour of the box. Default: `'none'`.",
               "default": "none"
              },
              "strokeWidth": {
               "type": "number",
               "description": "Outline width in pixels. Default: `1`.",
               "default": 1
              },
              "offset": {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 2,
               "maxItems": 2,
               "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
               "default": [
                0,
                0
               ]
              }
             },
             "additionalProperties": false,
             "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
            },
            "shadow": {
             "anyOf": [
              {
               "type": "boolean"
              },
              {
               "type": "object",
               "properties": {
                "dx": {
                 "type": "number",
                 "description": "Horizontal shadow offset in pixels. Default: `0`.",
                 "default": 0
                },
                "dy": {
                 "type": "number",
                 "description": "Vertical shadow offset in pixels. Default: `1`.",
                 "default": 1
                },
                "blur": {
                 "type": "number",
                 "description": "Shadow blur in pixels. Default: `2`.",
                 "default": 2
                },
                "color": {
                 "type": "string",
                 "description": "Shadow colour. Default: `'#000000'`.",
                 "default": "#000000"
                },
                "opacity": {
                 "type": "number",
                 "description": "Shadow opacity (0 to 1). Default: `0.35`.",
                 "default": 0.35
                }
               },
               "additionalProperties": false
              }
             ],
             "description": "drop shadow on the pill (on the text in halo mode)"
            },
            "raise": {
             "type": "boolean",
             "description": "axis labels sitting on marks are moved above the series (default true)"
            },
            "each": {
             "x-wcc-type": "function",
             "description": "per label: return an override (or 'none') for this one label; called only when set"
            }
           },
           "additionalProperties": false
          }
         ],
         "description": "labels that sit on bars: 'auto' (default) = untouched off the bars, contrasting colour over one fill, pill over mixed fills; 'none' = off. Layered over chart.readability"
        },
        "angle": {
         "anyOf": [
          {
           "const": "auto"
          },
          {
           "type": "number"
          }
         ],
         "description": "where the scale sits: degrees (startAngle convention, 0 = 12 o'clock) or 'auto' = the slot boundary with the shortest bars on both sides. Default: the start of the range"
        },
        "pinAngle": {
         "type": "boolean",
         "description": "'auto' keeps the first angle it found across updates (no jumping scale). Default true"
        }
       },
       "additionalProperties": false,
       "description": "Tick labels of the value scale."
      }
     },
     "additionalProperties": false,
     "description": "Value scale of the bars."
    },
    "categoryLabels": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the category names. Default: `true`.",
       "default": true
      },
      "orientation": {
       "type": "string",
       "enum": [
        "auto",
        "horizontal",
        "radial"
       ],
       "description": "`'horizontal'` or along the `'radial'` direction; `'auto'` keeps names horizontal when they\nfit their slot. Default: `'auto'`.",
       "default": "auto"
      },
      "offset": {
       "type": "number",
       "description": "Distance from the bars in px. Default: `8`.",
       "default": 8
      },
      "maxWidth": {
       "type": "number",
       "description": "Longest name in px before it is shortened. Default: `110`.",
       "default": 110
      },
      "step": {
       "type": "number",
       "description": "label every n-th category (disables automatic thinning)"
      },
      "maxCount": {
       "type": "number",
       "description": "most labels to show; default from the ring length (one per ~4 font sizes, 4-24)"
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(category, { index }) => string` for the name."
      }
     },
     "additionalProperties": false,
     "description": "Category names around the ring."
    },
    "center": {
     "type": "object",
     "properties": {
      "readability": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "none",
          "halo",
          "pill",
          "auto",
          "hide"
         ]
        },
        {
         "type": "boolean"
        },
        {
         "type": "object",
         "properties": {
          "mode": {
           "type": "string",
           "enum": [
            "none",
            "halo",
            "pill",
            "auto",
            "hide"
           ],
           "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
          },
          "fallback": {
           "type": "string",
           "enum": [
            "halo",
            "pill",
            "hide"
           ],
           "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
          },
          "enabled": {
           "type": "boolean",
           "description": "false switches the treatment off for this label kind"
          },
          "contrast": {
           "type": "boolean",
           "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
          },
          "minRatio": {
           "type": "number",
           "description": "WCAG 2 contrast ratio to reach. Default 4.5"
          },
          "light": {
           "type": "string",
           "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
          },
          "dark": {
           "type": "string",
           "description": "Dark colour of the pair. Default: `'#111827'`.",
           "default": "#111827"
          },
          "background": {
           "type": "string",
           "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
          },
          "halo": {
           "type": "object",
           "properties": {
            "width": {
             "type": "number",
             "description": "Outline width in pixels. Default: `3`.",
             "default": 3
            },
            "color": {
             "type": "string",
             "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
             "default": "auto"
            },
            "opacity": {
             "type": "number",
             "description": "Outline opacity (0 to 1). Default: `0.92`.",
             "default": 0.92
            },
            "blur": {
             "type": "number",
             "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
             "default": 0
            }
           },
           "additionalProperties": false,
           "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
          },
          "pill": {
           "type": "object",
           "properties": {
            "fill": {
             "type": "string",
             "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
             "default": "auto"
            },
            "opacity": {
             "type": "number",
             "description": "Box opacity (0 to 1). Default: `0.9`.",
             "default": 0.9
            },
            "radius": {
             "type": "number",
             "description": "Corner radius in pixels. Default: `4`.",
             "default": 4
            },
            "padding": {
             "anyOf": [
              {
               "type": "number"
              },
              {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 2,
               "maxItems": 2
              }
             ],
             "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
             "default": [
              1,
              4
             ]
            },
            "stroke": {
             "type": "string",
             "description": "Outline colour of the box. Default: `'none'`.",
             "default": "none"
            },
            "strokeWidth": {
             "type": "number",
             "description": "Outline width in pixels. Default: `1`.",
             "default": 1
            },
            "offset": {
             "type": "array",
             "prefixItems": [
              {
               "type": "number"
              },
              {
               "type": "number"
              }
             ],
             "minItems": 2,
             "maxItems": 2,
             "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
             "default": [
              0,
              0
             ]
            }
           },
           "additionalProperties": false,
           "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
          },
          "shadow": {
           "anyOf": [
            {
             "type": "boolean"
            },
            {
             "type": "object",
             "properties": {
              "dx": {
               "type": "number",
               "description": "Horizontal shadow offset in pixels. Default: `0`.",
               "default": 0
              },
              "dy": {
               "type": "number",
               "description": "Vertical shadow offset in pixels. Default: `1`.",
               "default": 1
              },
              "blur": {
               "type": "number",
               "description": "Shadow blur in pixels. Default: `2`.",
               "default": 2
              },
              "color": {
               "type": "string",
               "description": "Shadow colour. Default: `'#000000'`.",
               "default": "#000000"
              },
              "opacity": {
               "type": "number",
               "description": "Shadow opacity (0 to 1). Default: `0.35`.",
               "default": 0.35
              }
             },
             "additionalProperties": false
            }
           ],
           "description": "drop shadow on the pill (on the text in halo mode)"
          },
          "raise": {
           "type": "boolean",
           "description": "axis labels sitting on marks are moved above the series (default true)"
          },
          "each": {
           "x-wcc-type": "function",
           "description": "per label: return an override (or 'none') for this one label; called only when set"
          }
         },
         "additionalProperties": false
        }
       ],
       "description": "centre value + label readability (explicit modes; default none)"
      },
      "show": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "boolean"
        }
       ],
       "description": "`true` always shows the centre; `'auto'` shows it when the hole is at least 34 px. Default:\n`'auto'`.",
       "default": "auto"
      },
      "label": {
       "type": "string",
       "description": "Label under the value; not set uses the gauge layer name, `'Total'` with columns, or the\nfirst layer name."
      },
      "value": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "Fixed value or text, or a function returning text; not set uses the gauge value or the\ntotal."
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(value, { w }) => string` for a numeric centre value."
      },
      "hover": {
       "type": "boolean",
       "description": "show the hovered slot / segment in the centre"
      }
     },
     "additionalProperties": false,
     "description": "Value and label in the hole."
    },
    "layers": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RadialColumnLayer"
     },
     "description": "Inner layers, innermost first. Default: `[]`.",
     "default": []
    },
    "layerGap": {
     "type": "number",
     "description": "px between the outermost inner layer and the column ring"
    },
    "hole": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "radius of the empty centre: 'auto', px, '%' or fraction of the space inside the column ring"
    },
    "legend": {
     "type": "object",
     "properties": {
      "show": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "boolean"
        }
       ],
       "description": "`true` always shows it; `'auto'` from two items. Default: `'auto'`.",
       "default": "auto"
      },
      "position": {
       "type": "string",
       "enum": [
        "auto",
        "right",
        "bottom"
       ],
       "description": "`'right'` or `'bottom'`; `'auto'` uses the right on wide plots. Default: `'auto'`.",
       "default": "auto"
      }
     },
     "additionalProperties": false,
     "description": "Legend of series and layer items."
    }
   },
   "additionalProperties": false
  },
  "RadialIncident": {
   "type": "object",
   "properties": {
    "from": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "first slot: category name or index"
    },
    "to": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "last slot, inclusive (default: from)"
    },
    "label": {
     "type": "string",
     "description": "text after the window, e.g. 'EU checkout errors'"
    },
    "keys": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "semantic keys of the incident (info())"
    }
   },
   "required": [
    "from"
   ],
   "additionalProperties": false
  },
  "RadialLayerDatumObject": {
   "type": "object",
   "properties": {
    "x": {
     "type": "string",
     "description": "Name of the segment (alias of `name`)."
    },
    "name": {
     "type": "string",
     "description": "Name of the segment."
    },
    "y": {
     "type": "number",
     "description": "Value of the segment (alias of `value`)."
    },
    "value": {
     "type": "number",
     "description": "Value of the segment."
    },
    "color": {
     "type": "string",
     "description": "Colour of the segment."
    },
    "max": {
     "type": "number",
     "description": "Arc and goals layers: value of a full arc for this point."
    },
    "target": {
     "type": "number",
     "description": "goals: the ring's target (alias of max)"
    },
    "trackColor": {
     "type": "string",
     "description": "goals: track colour of this ring (default: derived from the ring colour)"
    },
    "label": {
     "type": "string",
     "description": "goals: ring label (default: the name)"
    },
    "children": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "number"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ],
        "minItems": 2,
        "maxItems": 2
       },
       {
        "$ref": "#/$defs/RadialLayerDatumObject"
       }
      ]
     },
     "description": "Sunburst: child segments on the next ring."
    },
    "link": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "linked categories (indices or names)"
    },
    "keys": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "semantic keys (e.g. a service id): marks of other layers sharing a key light together; a sunburst parent takes the union of its children"
    },
    "values": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "this segment's own outer values (filter interaction)"
    }
   },
   "additionalProperties": false
  },
  "RadialMatrixCell": {
   "type": "object",
   "properties": {
    "row": {
     "type": "string",
     "description": "Row id (or name)."
    },
    "col": {
     "type": "string",
     "description": "Column id (or name)."
    },
    "value": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "number"
      }
     ],
     "description": "Cell value (value mode; shown in the tooltip in status mode)."
    },
    "status": {
     "type": "string",
     "description": "Status name (ok, info, warn, crit, unknown or one of `statuses`)."
    },
    "label": {
     "type": "string",
     "description": "Note shown in the tooltip."
    },
    "color": {
     "type": "string",
     "description": "Own colour of the cell (value mode)."
    },
    "link": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       }
      }
     ],
     "description": "Own linked outer categories (else the union of the row's and column's)."
    },
    "keys": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Own semantic keys (else the row's and column's)."
    },
    "values": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "Own outer values (filter interaction)."
    }
   },
   "required": [
    "row",
    "col"
   ],
   "additionalProperties": false
  },
  "RadialMatrixHeader": {
   "type": "object",
   "properties": {
    "id": {
     "type": "string",
     "description": "Id used in flow / cell data; default: the name."
    },
    "name": {
     "type": "string",
     "description": "Shown name; default: the id."
    },
    "short": {
     "type": "string",
     "description": "Short label for horizontal column headers (e.g. 'PAY'); default: the name, rotated when it does not fit."
    },
    "keys": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Semantic keys shared with other layers (cross-lighting); a cell takes its row's and column's keys."
    },
    "link": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       }
      }
     ],
     "description": "Outer categories this row / column links to; a cell links the union of its row and column."
    },
    "values": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "Own outer values of the row / column (filter interaction)."
    }
   },
   "additionalProperties": false
  },
  "RadialMatrixScale": {
   "type": "object",
   "properties": {
    "scale": {
     "type": "string",
     "enum": [
      "diverging",
      "sequential"
     ],
     "description": "`'sequential'` (low to high) or `'diverging'` around `mid`. Default: `'sequential'`.",
     "default": "sequential"
    },
    "domain": {
     "type": "array",
     "items": {
      "type": "number"
     },
     "description": "[lo, hi] or [lo, mid, hi]; default: data extent."
    },
    "mid": {
     "type": "number",
     "description": "Diverging centre. Default: `0`.",
     "default": 0
    },
    "stops": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Colour stops, low to high."
    },
    "reverse": {
     "type": "boolean",
     "description": "Reverses the colour stops. Default: `false`.",
     "default": false
    }
   },
   "additionalProperties": false
  },
  "RadialVitalsBand": {
   "type": "object",
   "properties": {
    "to": {
     "type": "number",
     "description": "Upper value of the band (inclusive); omitted on the last band."
    },
    "level": {
     "type": "number",
     "enum": [
      0,
      2,
      1,
      3
     ],
     "description": "0 = normal ... 3 = highest; colour + pattern."
    },
    "label": {
     "type": "string",
     "description": "Text of the band in tooltip and table."
    }
   },
   "required": [
    "level"
   ],
   "additionalProperties": false
  },
  "RadialVitalsRow": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string"
    },
    "unit": {
     "type": "string"
    },
    "aggregate": {
     "type": "string",
     "enum": [
      "last",
      "max",
      "min",
      "mean",
      "median"
     ],
     "description": "How several measurements in one slot become the cell value. Default: `'median'`.",
     "default": "median"
    },
    "bands": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RadialVitalsBand"
     }
    },
    "data": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "One value per slot; null = not measured (hatched, never 0)."
    },
    "samples": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "array",
        "items": {
         "type": "array",
         "prefixItems": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "minItems": 2,
         "maxItems": 2
        }
       }
      ]
     },
     "description": "Per slot: the single measurements [label, value] (tooltip, n)."
    }
   },
   "required": [
    "name",
    "data"
   ],
   "additionalProperties": false
  },
  "RadialWaveAnomaly": {
   "type": "object",
   "properties": {
    "series": {
     "type": "string",
     "description": "Row name (layer-level lists; not set = every row)."
    },
    "at": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Point index, or a point label (e.g. 'Wed 18:00')."
    },
    "label": {
     "type": "string",
     "description": "Text in the tooltip, data table and rim marks."
    },
    "kind": {
     "type": "string",
     "description": "Kind shown when there is no label. Default: 'Anomaly' ('Above normal' / 'Below normal' for automatic ones)."
    },
    "color": {
     "type": "string",
     "description": "Spike colour. Default: a rose red (lighter in dark mode)."
    }
   },
   "required": [
    "at"
   ],
   "additionalProperties": false
  },
  "RadialWaveSector": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string",
     "description": "Sector name (tooltip, legend filter, link by category)."
    },
    "label": {
     "type": "string",
     "description": "Curved label text; not set uses the name."
    },
    "link": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "Linked categories of the sector's cells."
    },
    "keys": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Semantic keys of the sector's cells."
    },
    "values": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "The sector's own outer values (filter interaction)."
    }
   },
   "additionalProperties": false
  },
  "RadialWaveSeries": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string",
     "description": "Row name (legend, tooltip)."
    },
    "data": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       },
       {
        "type": "array",
        "prefixItems": [
         {},
         {
          "anyOf": [
           {
            "type": "null"
           },
           {
            "type": "number"
           }
          ]
         }
        ],
        "minItems": 2,
        "maxItems": 2
       },
       {
        "type": "object",
        "properties": {
         "y": {
          "anyOf": [
           {
            "type": "null"
           },
           {
            "type": "number"
           }
          ]
         }
        },
        "required": [
         "y"
        ],
        "additionalProperties": false
       }
      ]
     },
     "description": "One value per point; null = gap. Numbers, [x, y] or { y }."
    },
    "color": {
     "type": "string",
     "description": "Row colour; not set takes the next palette colour."
    },
    "envelope": {
     "type": "object",
     "properties": {
      "lo": {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "null"
         },
         {
          "type": "number"
         }
        ]
       },
       "description": "Lower bound per point."
      },
      "hi": {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "null"
         },
         {
          "type": "number"
         }
        ]
       },
       "description": "Upper bound per point."
      }
     },
     "required": [
      "lo",
      "hi"
     ],
     "additionalProperties": false,
     "description": "Normal range per point: a soft band behind the wave; points outside it are anomalies."
    },
    "forecast": {
     "type": "object",
     "properties": {
      "data": {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "null"
         },
         {
          "type": "number"
         }
        ]
       },
       "description": "Forecast values."
      },
      "lo": {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "null"
         },
         {
          "type": "number"
         }
        ]
       },
       "description": "Lower bound of the forecast range."
      },
      "hi": {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "null"
         },
         {
          "type": "number"
         }
        ]
       },
       "description": "Upper bound of the forecast range."
      }
     },
     "additionalProperties": false,
     "description": "Forecast per point (usually null up to now): dashed crest, optional hatched range."
    },
    "anomalies": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RadialWaveAnomaly"
     },
     "description": "Anomalies of this row (as layer anomalies, without series)."
    },
    "keys": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Semantic keys shared by every cell of the row (see 8.3a)."
    },
    "link": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "Linked categories of every cell of the row (else the sector's link, else the layer's link mode)."
    }
   },
   "required": [
    "data"
   ],
   "additionalProperties": false
  },
  "TextAnnotations": {
   "type": "object",
   "properties": {
    "x": {
     "type": "number",
     "description": "Horizontal position in pixels from the left of the chart SVG. Default: `0`.",
     "default": 0
    },
    "y": {
     "type": "number",
     "description": "Vertical position in pixels from the top of the chart SVG. Default: `0`.",
     "default": 0
    },
    "text": {
     "type": "string",
     "description": "The text to draw. Default: `''`.",
     "default": ""
    },
    "textAnchor": {
     "type": "string",
     "description": "Horizontal anchor of the text at x: 'start', 'middle' or 'end'. Default: `'start'`.",
     "default": "start"
    },
    "foreColor": {
     "type": "string",
     "description": "Text colour; not set uses the chart text colour."
    },
    "fontSize": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Font size of the text. Default: `'13px'`.",
     "default": "13px"
    },
    "fontFamily": {
     "type": "string",
     "description": "Font family; not set uses the chart font."
    },
    "fontWeight": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Font weight of the text. Default: `400`.",
     "default": 400
    },
    "backgroundColor": {
     "type": "string",
     "description": "Fill colour of the box behind the text. Default: `'transparent'`.",
     "default": "transparent"
    },
    "borderColor": {
     "type": "string",
     "description": "Border colour of the box. Default: `'#c2c2c2'`.",
     "default": "#c2c2c2"
    },
    "borderRadius": {
     "type": "number",
     "description": "Corner radius of the box in pixels. Default: `0`.",
     "default": 0
    },
    "borderWidth": {
     "type": "number",
     "description": "Border width of the box in pixels; 0 draws no border. Default: `0`.",
     "default": 0
    },
    "paddingLeft": {
     "type": "number",
     "description": "Left padding of the box in pixels. Default: `4`.",
     "default": 4
    },
    "paddingRight": {
     "type": "number",
     "description": "Right padding of the box in pixels. Default: `4`.",
     "default": 4
    },
    "paddingTop": {
     "type": "number",
     "description": "Top padding of the box in pixels. Default: `2`.",
     "default": 2
    },
    "paddingBottom": {
     "type": "number",
     "description": "Bottom padding of the box in pixels. Default: `2`.",
     "default": 2
    }
   },
   "additionalProperties": false
  },
  "WccChartAccessibility": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "false switches off the description, keyboard access and announcements. Default: `true`.",
     "default": true
    },
    "description": {
     "type": "string",
     "description": "Text of the chart description for screen readers; not set generates one from the chart type and\ndata."
    },
    "announcements": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Announces the focused point and zoom, pan and reset changes in a live region when true. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Live-region announcements for screen readers."
    },
    "keyboard": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Makes the chart SVG focusable (tabindex 0) and keyboard operable. Default: `true`.",
       "default": true
      },
      "navigation": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Lets the arrow keys move between points. Default: `true`.",
         "default": true
        },
        "wrapAround": {
         "type": "boolean",
         "description": "Moving past the last point continues at the first (and back). Default: `false`.",
         "default": false
        }
       },
       "additionalProperties": false,
       "description": "Arrow-key navigation between data points."
      }
     },
     "additionalProperties": false,
     "description": "Keyboard access to the chart."
    }
   },
   "additionalProperties": false
  },
  "WccChordOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "matrix": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "array",
       "items": {
        "type": "array",
        "items": {
         "type": "number"
        }
       }
      }
     ],
     "description": "Flow matrix instead of series data: rows are the sources, columns the targets (names from `labels`). Default: `null`.",
     "default": null
    },
    "labels": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Group names for the `matrix` rows and columns; missing names become `Group 1`, `Group 2`, ….\nDefault: `[]`.",
     "default": []
    },
    "directed": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "boolean"
      }
     ],
     "description": "`true` sizes each arc by what the group sends plus what it receives; `false` by what it sends\nonly (each flow is drawn once); `'auto'` uses `false` when every flow has an equal reverse\nflow. Default: `'auto'`.",
     "default": "auto"
    },
    "padAngle": {
     "type": "number",
     "description": "Gap between neighbouring groups in radians. Default: `0.03`.",
     "default": 0.03
    },
    "sort": {
     "type": "string",
     "enum": [
      "none",
      "asc",
      "desc"
     ],
     "description": "Group order around the circle: data order (`'none'`), or by size `'asc'` / `'desc'`. Default:\n`'none'`.",
     "default": "none"
    },
    "ringWidth": {
     "type": "number",
     "description": "Thickness of the group ring in px (4 px up to a third of the radius). Default: `12`.",
     "default": 12
    },
    "ribbon": {
     "type": "object",
     "properties": {
      "opacity": {
       "type": "number",
       "description": "Ribbon opacity; not set uses 0.5 (0.58 in dark mode)."
      },
      "colorMode": {
       "type": "string",
       "enum": [
        "source",
        "target",
        "gradient"
       ],
       "description": "Ribbon colour from the `'source'` group, the `'target'` group, or a `'gradient'` between both. Default: `'source'`.",
       "default": "source"
      },
      "padding": {
       "type": "number",
       "description": "Gap between the ring and the ribbon ends in px. Default: `2`.",
       "default": 2
      }
     },
     "additionalProperties": false,
     "description": "Flow ribbons."
    },
    "groups": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "id": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ],
        "description": "Group id used in the data."
       },
       "name": {
        "type": "string",
        "description": "Shown name; not set uses the id."
       },
       "color": {
        "type": "string",
        "description": "Group colour."
       }
      },
      "required": [
       "id"
      ],
      "additionalProperties": false
     },
     "description": "Group definitions that set names and colours. Default: `[]`.",
     "default": []
    },
    "ticks": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the ticks. Default: `false`.",
       "default": false
      },
      "step": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Value step of the minor ticks; `'auto'` keeps them about 9 px apart. Default: `'auto'`.",
       "default": "auto"
      },
      "labelStep": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Value step of the labelled ticks; `'auto'` uses a 1/2/5/10 multiple of `step` about 44 px apart. Default: `'auto'`.",
       "default": "auto"
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(value, { w }) => string` for tick labels; not set uses a compact number."
      }
     },
     "additionalProperties": false,
     "description": "Value ticks along the outside of the ring."
    },
    "dataLabels": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the group labels. Default: `true`.",
       "default": true
      },
      "showValue": {
       "type": "boolean",
       "description": "Shows the group size under the name. Default: `true`.",
       "default": true
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(name, { node, w }) => string` for the label name."
      }
     },
     "additionalProperties": false,
     "description": "Group labels outside the ring."
    }
   },
   "additionalProperties": false
  },
  "WccColorScale": {
   "type": "object",
   "properties": {
    "colors": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Colours from the lowest to the highest value."
    },
    "min": {
     "type": "number",
     "description": "Value mapped to the first colour; not set uses the smallest sample."
    },
    "max": {
     "type": "number",
     "description": "Value mapped to the last colour; not set uses the largest sample."
    },
    "steps": {
     "type": "number",
     "description": "Number of discrete colour steps; not set gives a continuous scale."
    }
   },
   "additionalProperties": false
  },
  "WccDatum": {
   "type": "object",
   "properties": {
    "x": {
     "description": "Category, timestamp or number of the point on the x axis (cartesian types, calendar dates,\nbeeswarm groups)."
    },
    "y": {
     "description": "Value of the point; an array for range-like types (e.g. `[low, high]` or box-plot quartiles)."
    },
    "id": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "hierarchies (treemap, sunburst, icicle), tree and network nodes"
    },
    "name": {
     "type": "string",
     "description": "Display name of a node, slice or unit; used by labels, tooltips and the legend."
    },
    "value": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "number"
      }
     ],
     "description": "Size of a hierarchy, sankey, chord or map item; `null` marks a missing value."
    },
    "children": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/WccDatum"
     },
     "description": "Child items of a hierarchy node (treemap, sunburst, icicle, tree)."
    },
    "isTotal": {
     "type": "boolean",
     "description": "waterfall: bar that shows the running total / a subtotal"
    },
    "isSubtotal": {
     "type": "boolean",
     "description": "Waterfall: draws this bar as the running total since the previous subtotal."
    },
    "points": {
     "type": "array",
     "items": {
      "type": "number"
     },
     "description": "raw samples: boxPlot, violin, raincloud, beeswarm"
    },
    "from": {
     "description": "sankey, chord and map arcs"
    },
    "to": {
     "description": "Target node id (sankey, chord, network edges) or target location (map arcs and routes)."
    },
    "highlight": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "number"
      }
     ],
     "description": "highlight-filter feature: the filtered part of this mark"
    },
    "color": {
     "type": "string",
     "description": "Colour of this item; overrides the series colour."
    },
    "fillColor": {
     "type": "string",
     "description": "Fill colour of this item; overrides `color` for the fill."
    },
    "strokeColor": {
     "type": "string",
     "description": "Stroke colour of this item; overrides the series stroke colour."
    },
    "meta": {
     "description": "Free data kept with the item and passed to formatters and events; not drawn."
    }
   },
   "additionalProperties": true
  },
  "WccDrilldownOptions": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "Turns drilldown on: points with a level id open that level on click or Enter. Ignored by\nsunburst and icicle, which read the whole tree themselves. Default: `false`.",
     "default": false
    },
    "series": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "id": {
        "type": "string",
        "description": "Id of the level, referenced by the `drilldown` field of a point."
       },
       "name": {
        "type": "string",
        "description": "Name of the level, shown in the breadcrumb; not set uses the id."
       },
       "type": {
        "type": "string",
        "description": "Chart type of the level; not set keeps the parent's type."
       },
       "data": {
        "type": "array",
        "items": {},
        "description": "Data of the level, in the format of its chart type."
       }
      },
      "required": [
       "id",
       "data"
      ],
      "additionalProperties": true
     },
     "description": "Inline drilldown levels; each has an `id` that points reference and the data to show."
    },
    "animation": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Animates level changes; `false` switches instantly. Reduced-motion settings also switch instantly or fade. Default: `true`.",
       "default": true
      },
      "zoomFromPoint": {
       "type": "boolean",
       "description": "With transition `'auto'`, zooms the new level out of the clicked point. Default: `false`.",
       "default": false
      },
      "speed": {
       "type": "number",
       "description": "Duration of the level transition in milliseconds. Default: `260`.",
       "default": 260
      }
     },
     "additionalProperties": false,
     "description": "Transition between levels."
    },
    "onDrillDown": {
     "x-wcc-type": "function",
     "description": "called before a level opens; may return the level (or a Promise of it) to load on demand"
    },
    "cache": {
     "type": "boolean",
     "description": "Keeps levels returned by `onDrillDown`, so revisiting a level does not call it again. Default:\n`true`.",
     "default": true
    },
    "breadcrumb": {
     "anyOf": [
      {
       "const": false
      },
      {
       "type": "object",
       "properties": {
        "rootLabel": {
         "type": "string",
         "description": "Text of the first breadcrumb; not set uses the name of a single root series, else the locale string `drilldown.root`."
        }
       },
       "additionalProperties": true
      }
     ],
     "description": "Breadcrumb trail of the open levels; `false` hides it."
    },
    "wcc": {
     "type": "object",
     "properties": {
      "transition": {
       "type": "string",
       "description": "Level transition: `'auto'` (morph when type and point count match, otherwise dissolve), `'morph'`, `'dissolve'`, `'zoom'` or `'none'`. Default: `'auto'`.",
       "default": "auto"
      },
      "hint": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "string"
        }
       ],
       "description": "Shows the drill hint on hover over drillable points and adds it to their accessible labels. Default: `true`.",
       "default": true
      },
      "keepZoom": {
       "type": "boolean",
       "description": "Restores the zoom window of a level when going back up to it. Default: `false`.",
       "default": false
      },
      "prefetch": {
       "type": "boolean",
       "description": "Calls `onDrillDown` shortly after a drillable point is hovered or focused, so the level is ready on click. Default: `false`.",
       "default": false
      },
      "deepLink": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "string"
        }
       ],
       "description": "Writes the open path to the URL hash (`#wcc=...`) and restores it on load; an app-owned hash is left alone. Default: `false`.",
       "default": false
      },
      "syncGroup": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "string"
        }
       ],
       "description": "Follows drilldown navigation of other charts in the same `chart.group` that have the same levels. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": true,
     "description": "West Coast Charts drilldown extensions."
    }
   },
   "additionalProperties": true
  },
  "WccGanttColumnDef": {
   "type": "object",
   "properties": {
    "key": {
     "type": "string",
     "description": "Built-in column key or an own key."
    },
    "header": {
     "type": "string",
     "description": "Header text; not set uses `headers[key]` or the locale string."
    },
    "width": {
     "type": "number",
     "description": "Column width in pixels (at least 24). Default: `72` (built-in columns keep their own width).",
     "default": 72
    },
    "align": {
     "type": "string",
     "enum": [
      "end",
      "start",
      "middle"
     ],
     "description": "Text anchor of the cells: `'start'` or `'end'` (`'middle'` centres the body cells). Default: `'end'` for duration and progress, else `'start'`.",
     "default": "end"
    },
    "value": {
     "x-wcc-type": "function",
     "description": "Cell text from the raw task and `{ task, w }`."
    }
   },
   "required": [
    "key"
   ],
   "additionalProperties": false
  },
  "WccGanttOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "rowHeight": {
     "type": "number",
     "description": "Height of one task row in px. Default: `36`.",
     "default": 36
    },
    "barHeight": {
     "type": "number",
     "description": "fraction of the row"
    },
    "barRadius": {
     "type": "number",
     "description": "Corner radius of the task bars in px. Default: `5`.",
     "default": 5
    },
    "sort": {
     "type": "string",
     "enum": [
      "end",
      "start",
      "name",
      "input"
     ],
     "description": "`'input'` keeps the series order; `'start'` sorts the tasks of each group by start, then end.\n`'end'` sorts by end time; `'name'` sorts by locale-aware task name. Equal keys retain input order. Group order is unchanged.\nDefault: `'input'`.",
     "default": "input"
    },
    "grid": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the table and gives the timeline the full width. Default: `true`.",
       "default": true
      },
      "width": {
       "type": "number",
       "description": "Table width in px, capped at 42 % of the plot width. Default: `260`.",
       "default": 260
      },
      "columns": {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string",
          "enum": [
           "end",
           "start",
           "name",
           "duration",
           "progress",
           "assignee",
           "wbs",
           "ring"
          ]
         },
         {
          "$ref": "#/$defs/WccGanttColumnDef"
         }
        ]
       },
       "description": "Columns of the table in order. Default: `['name', 'start', 'duration']`.",
       "x-wcc-default": "['name', 'start', 'duration']"
      },
      "headers": {
       "type": "object",
       "properties": {
        "end": {
         "type": "string"
        },
        "start": {
         "type": "string"
        },
        "name": {
         "type": "string"
        },
        "duration": {
         "type": "string"
        },
        "progress": {
         "type": "string"
        },
        "assignee": {
         "type": "string"
        },
        "wbs": {
         "type": "string"
        },
        "ring": {
         "type": "string"
        }
       },
       "additionalProperties": false,
       "description": "Header text per column. Default: `{ name: 'Task', start: 'Start', end: 'End', duration: 'Days', progress: '%', assignee: 'Owner', wbs: 'WBS', ring: '' }`.",
       "x-wcc-default": "{ name: 'Task', start: 'Start', end: 'End', duration: 'Days', progress: '%', assignee: 'Owner', wbs: 'WBS', ring: '' }"
      }
     },
     "additionalProperties": false,
     "description": "Task table to the left of the timeline (right in RTL)."
    },
    "groups": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws a header row per group when there are several groups or the group is named. Default: `true`.",
       "default": true
      },
      "collapsible": {
       "type": "boolean",
       "description": "Lets a click on a group row collapse or expand its tasks. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Group rows (one group per series name)."
    },
    "labels": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` draws the bars without name labels. Default: `true`.",
       "default": true
      },
      "position": {
       "type": "string",
       "enum": [
        "right",
        "left",
        "inside"
       ],
       "description": "Preferred side of the label: `'right'` or `'left'` outside the bar, or `'inside'` when it fits (falls back outside on narrow bars). Default: `'right'`.",
       "default": "right"
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(name, { task, w }) => string` returns the label text; not set shows the name (plus the assignee when no assignee column is shown)."
      }
     },
     "additionalProperties": false,
     "description": "Task name labels on the bars."
    },
    "progress": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Fills each bar to its `progress` and adds the percentage to the label. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Progress fill of the bars."
    },
    "dependencies": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the links (and link editing). Default: `true`.",
       "default": true
      },
      "color": {
       "type": "string",
       "description": "Link colour; not set uses a muted theme colour (critical links use the critical-path colour)."
      },
      "radius": {
       "type": "number",
       "description": "Corner radius of the link elbows in px. Default: `6`.",
       "default": 6
      },
      "arrowSize": {
       "type": "number",
       "description": "Size of the arrow head in px. Default: `5`.",
       "default": 5
      },
      "lagLabels": {
       "type": "boolean",
       "description": "Writes a link's lag or lead (e.g. \"+2d\") on the link. Default: `true`.",
       "default": true
      },
      "violations": {
       "type": "boolean",
       "description": "Dashes and marks links whose successor starts before the dependency allows. Default: `false`.",
       "default": false
      },
      "edit": {
       "type": "boolean",
       "description": "Lets the user draw links from the handle at a bar's end and delete a selected link. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Dependency links between tasks."
    },
    "today": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws a vertical line at today. Default: `true`.",
       "default": true
      },
      "date": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "x-wcc-type": "Date"
        }
       ],
       "description": "Date used as \"today\"; not set uses the current time."
      },
      "label": {
       "type": "string",
       "description": "Text of the today marker and its control button. Default: `'Today'`.",
       "default": "Today"
      }
     },
     "additionalProperties": false,
     "description": "Today marker."
    },
    "weekends": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shades Saturdays and Sundays once a day is at least 10 px wide. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Weekend shading (used when no working calendar is set)."
    },
    "calendar": {
     "type": "object",
     "properties": {
      "workingDays": {
       "type": "array",
       "items": {
        "type": "number"
       },
       "description": "Working weekdays, 0 = Sunday ... 6 = Saturday. Default: `[1, 2, 3, 4, 5]`.",
       "default": [
        1,
        2,
        3,
        4,
        5
       ]
      },
      "holidays": {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         },
         {
          "x-wcc-type": "Date"
         },
         {
          "type": "object",
          "properties": {
           "date": {
            "anyOf": [
             {
              "type": "string"
             },
             {
              "type": "number"
             },
             {
              "x-wcc-type": "Date"
             }
            ],
            "description": "Date of the holiday."
           },
           "name": {
            "type": "string",
            "description": "Name shown for the holiday."
           }
          },
          "required": [
           "date"
          ],
          "additionalProperties": false
         },
         {
          "type": "object",
          "properties": {
           "from": {
            "anyOf": [
             {
              "type": "string"
             },
             {
              "type": "number"
             },
             {
              "x-wcc-type": "Date"
             }
            ],
            "description": "First day of the holiday range."
           },
           "to": {
            "anyOf": [
             {
              "type": "string"
             },
             {
              "type": "number"
             },
             {
              "x-wcc-type": "Date"
             }
            ],
            "description": "Last day of the holiday range (inclusive)."
           },
           "name": {
            "type": "string",
            "description": "Name shown for the holiday."
           }
          },
          "required": [
           "from",
           "to"
          ],
          "additionalProperties": false
         }
        ]
       },
       "description": "Non-working dates: a date, `{ date, name }` or a range `{ from, to, name }`."
      },
      "shade": {
       "type": "boolean",
       "description": "`false` stops shading non-working days. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Working calendar: durations, moves and resizes count working days. Not set: calendar days."
    },
    "criticalPath": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Outlines the tasks without float (a delay moves the project end) and the links between them. Default: `false`.",
       "default": false
      },
      "color": {
       "type": "string",
       "description": "Colour of the critical path; not set uses the theme's negative colour."
      }
     },
     "additionalProperties": false,
     "description": "Critical path highlighting."
    },
    "baselines": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws a task's `baseline` dates as a thin bar under it and adds it to the legend. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Planned (baseline) bars."
    },
    "zoom": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "`false` disables zooming. Default: `true`.",
       "default": true
      },
      "wheel": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "string"
        }
       ],
       "description": "`false` turns off Ctrl/Cmd + wheel zoom; any other value keeps it (a plain wheel always scrolls). Default: `'ctrl'`.",
       "default": "ctrl"
      },
      "minDays": {
       "type": "number",
       "description": "Smallest visible span in days. Default: `3`.",
       "default": 3
      },
      "maxDays": {
       "type": "number",
       "description": "Largest visible span in days. Default: `3650`.",
       "default": 3650
      }
     },
     "additionalProperties": false,
     "description": "Zoom of the time axis."
    },
    "drag": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Lets the user move bars (and enables the editing options). Default: `false`.",
       "default": false
      },
      "resize": {
       "type": "boolean",
       "description": "Adds resize handles at the bar ends while dragging is on. Default: `true`.",
       "default": true
      },
      "snap": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "day",
          "hour"
         ]
        },
        {
         "const": false
        }
       ],
       "description": "Snap of moved dates: `'day'`, `'hour'`, a step in ms, or `false` for none. Default: `'day'`.",
       "default": "day"
      },
      "draw": {
       "type": "boolean",
       "description": "Lets the user draw new tasks on empty rows and shows the \"+ Add task\" row. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Moving and resizing tasks with the pointer."
    },
    "edit": {
     "type": "object",
     "properties": {
      "undo": {
       "type": "boolean",
       "description": "Keeps an undo / redo history of edits. Default: `true`.",
       "default": true
      },
      "keyboard": {
       "type": "boolean",
       "description": "Allows keyboard edits of the focused task. Default: `true`.",
       "default": true
      },
      "remove": {
       "type": "boolean",
       "description": "Lets Delete / Backspace remove the focused task. Default: `true`.",
       "default": true
      },
      "rename": {
       "type": "boolean",
       "description": "Lets a double click on a task name rename it inline. Default: `true`.",
       "default": true
      },
      "newName": {
       "type": "string",
       "description": "Name given to a newly created task. Default: `'New task'`.",
       "default": "New task"
      },
      "newDays": {
       "type": "number",
       "description": "Length in days of a task created with the add button or keyboard. Default: `3`.",
       "default": 3
      },
      "addLabel": {
       "type": "string",
       "description": "Text of the add row (shown after \"+ \"). Default: `'Add task'`.",
       "default": "Add task"
      }
     },
     "additionalProperties": false,
     "description": "Editing behaviour (needs `drag.enabled`)."
    },
    "range": {
     "type": "object",
     "properties": {
      "min": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "x-wcc-type": "Date"
        }
       ],
       "description": "Start of the timeline; not set fits the tasks."
      },
      "max": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "x-wcc-type": "Date"
        }
       ],
       "description": "End of the timeline; not set fits the tasks (with room for labels)."
      }
     },
     "additionalProperties": false,
     "description": "Fixed time range of the timeline."
    },
    "boundary": {
     "type": "object",
     "properties": {
      "start": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "x-wcc-type": "Date"
        }
       ],
       "description": "Project start date."
      },
      "end": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        },
        {
         "x-wcc-type": "Date"
        }
       ],
       "description": "Project end date (deadline)."
      },
      "startLabel": {
       "type": "string",
       "description": "Label of the start line. Default: `'Start'`.",
       "default": "Start"
      },
      "endLabel": {
       "type": "string",
       "description": "Label of the deadline line. Default: `'Deadline'`.",
       "default": "Deadline"
      },
      "shade": {
       "type": "boolean",
       "description": "`false` stops shading the time outside the boundary. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Project boundary: dashed start / deadline lines; tasks outside it are flagged."
    },
    "annotations": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "x": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         },
         {
          "x-wcc-type": "Date"
         }
        ],
        "description": "Date of the marker, or start of the range."
       },
       "x2": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         },
         {
          "x-wcc-type": "Date"
         }
        ],
        "description": "End of the range; set draws a shaded band."
       },
       "label": {
        "type": "string",
        "description": "Text of the chip or note."
       },
       "color": {
        "type": "string",
        "description": "Colour; not set cycles through theme colours."
       },
       "dash": {
        "type": "boolean",
        "description": "`false` draws the marker solid; any other value keeps it dashed."
       },
       "task": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ],
        "description": "Task id: draws the annotation as a note on that task's row."
       }
      },
      "required": [
       "x"
      ],
      "additionalProperties": false
     },
     "description": "Timeline annotations: a marker line, a range (`x2`), or a note on a task's bar (`task`).\nDefault: `[]`.",
     "default": []
    },
    "persist": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "object",
       "properties": {
        "key": {
         "type": "string",
         "description": "localStorage key."
        },
        "view": {
         "type": "boolean",
         "description": "Saves the visible time range. Default: `true`.",
         "default": true
        },
        "collapsed": {
         "type": "boolean",
         "description": "Saves the collapsed groups. Default: `true`.",
         "default": true
        },
        "selection": {
         "type": "boolean",
         "description": "Saves the selected tasks. Default: `false`.",
         "default": false
        }
       },
       "required": [
        "key"
       ],
       "additionalProperties": false
      }
     ],
     "description": "Saves the view to localStorage under this key (a string) or `{ key, ... }`; not set saves\nnothing."
    },
    "controls": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the control buttons. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "On-chart buttons (today, zoom)."
    },
    "selection": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Lets a click select a task. Default: `true`.",
       "default": true
      },
      "multiple": {
       "type": "boolean",
       "description": "Lets Ctrl/Cmd/Shift + click add to the selection. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Task selection."
    },
    "crosshair": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws a vertical line with the date under the pointer. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Time crosshair."
    },
    "rtl": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "boolean"
      }
     ],
     "description": "Mirrored layout (table on the right, time runs right to left); `'auto'` follows the CSS\ndirection. Default: `'auto'`.",
     "default": "auto"
    }
   },
   "additionalProperties": false
  },
  "WccHighlightFilterOptions": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "Draws the filtered part of each mark over its whole when parts are given. Default: `true`.",
     "default": true
    },
    "data": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "pie/donut/polarArea/radialBar: the filtered part of every slice"
    },
    "fadeOpacity": {
     "type": "number",
     "description": "Opacity of the whole behind its part. Default: `0.2`.",
     "default": 0.2
    },
    "outline": {
     "type": "object",
     "properties": {
      "width": {
       "type": "number",
       "description": "Outline width in pixels. Default: `1`.",
       "default": 1
      },
      "opacity": {
       "type": "number",
       "description": "Outline opacity. Default: `1`.",
       "default": 1
      }
     },
     "additionalProperties": false,
     "description": "Outline of the faded whole."
    },
    "enter": {
     "type": "string",
     "description": "Where parts animate from: `'whole'` (the whole's extent) or `'baseline'`. Default: `'whole'`.",
     "default": "whole"
    },
    "axis": {
     "type": "string",
     "description": "A part larger than its whole: `'extend'` grows the value axis and hatches the overflow,\n`'clamp'` cuts it at the whole. 100% stacks and treemaps always clamp. Default: `'extend'`.",
     "default": "extend"
    },
    "dataLabels": {
     "type": "object",
     "properties": {
      "value": {
       "type": "string",
       "description": "`'part'` or `'whole'` value in the point labels. Default: `'part'`.",
       "default": "part"
      },
      "total": {
       "type": "string",
       "description": "`'part'` or `'whole'` value in stack total labels. Default: `'part'`.",
       "default": "part"
      }
     },
     "additionalProperties": false,
     "description": "Which value the data labels show."
    },
    "tooltip": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Adds the part to the tooltip. Default: `true`.",
       "default": true
      },
      "share": {
       "type": "boolean",
       "description": "Adds the part's percentage of the whole. Default: `false`.",
       "default": false
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Returns the tooltip text of the part from `(part, whole, opts)`."
      }
     },
     "additionalProperties": false,
     "description": "Part line in the tooltip."
    },
    "line": {
     "type": "object",
     "properties": {
      "dashArray": {
       "type": "number",
       "description": "Dash length of the whole line behind the part line. Default: `4`.",
       "default": 4
      }
     },
     "additionalProperties": false,
     "description": "Line and area charts."
    },
    "pie": {
     "type": "object",
     "properties": {
      "encoding": {
       "type": "string",
       "description": "How a slice shows its part: `'radius'` scales the radius with the share, `'area'` scales the area. Default: `'radius'`.",
       "default": "radius"
      }
     },
     "additionalProperties": false,
     "description": "Pie, donut and polar-area charts."
    },
    "wcc": {
     "type": "object",
     "properties": {
      "csv": {
       "type": "string",
       "enum": [
        "both",
        "whole"
       ],
       "description": "CSV export: `'whole'` exports the wholes, `'both'` adds a \"<series> (part)\" column per series. Default: `'whole'`.",
       "default": "whole"
      },
      "combo": {
       "type": "boolean",
       "description": "`false` draws combo charts without parts. Default: `true`.",
       "default": true
      },
      "pattern": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "boolean"
        }
       ],
       "description": "Bars whose part exceeds the whole (`axis: 'extend'`): `'auto'` or `true` hatch the overflow,\n`false` keeps it solid; the dashed edge marks the whole either way. Default: `'auto'`.",
       "default": "auto"
      },
      "stagger": {
       "type": "number",
       "description": "Delay of each series' part animation, multiplied by the series index, in milliseconds. Default: `0`.",
       "default": 0
      },
      "labelShare": {
       "type": "boolean",
       "description": "Adds the part's percentage to the data labels. Default: `false`.",
       "default": false
      },
      "streamingParts": {
       "type": "boolean",
       "description": "With `appendData`, extends parts set through the API with the data (new points have no part) instead of dropping them. Default: `true`.",
       "default": true
      },
      "wholeLabels": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "boolean"
        }
       ],
       "description": "Labels of the wholes: `'auto'` on non-stacked bars with data labels on, `true` forces them on non-stacked bars, `false` turns them off. Default: `'auto'`.",
       "default": "auto"
      },
      "key": {
       "type": "object",
       "properties": {
        "show": {
         "anyOf": [
          {
           "const": "auto"
          },
          {
           "type": "boolean"
          }
         ],
         "description": "`'auto'` shows the key when all series are lines or areas. Default: `'auto'`.",
         "default": "auto"
        },
        "whole": {
         "type": "string",
         "description": "Key text of the whole; not set uses the locale string `highlight.keyWhole`."
        },
        "part": {
         "type": "string",
         "description": "Key text of the part; not set uses the locale string `highlight.keyPart`."
        }
       },
       "additionalProperties": false,
       "description": "Encoding key above the plot that explains whole and part."
      }
     },
     "additionalProperties": false,
     "description": "West Coast Charts highlight-filter extensions."
    }
   },
   "additionalProperties": true
  },
  "WccHistoryOptions": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "Records view changes (zoom, pan, legend toggles, selection, drilldown, filters) for undo and\nredo. Default: `false`.",
     "default": false
    },
    "maxDepth": {
     "type": "number",
     "description": "Most entries kept; older ones are dropped. Default: `100`.",
     "default": 100
    },
    "coalesceMs": {
     "type": "number",
     "description": "changes closer than this many ms become one entry"
    },
    "keyboard": {
     "type": "boolean",
     "description": "Ctrl/Cmd+Z undoes, Ctrl/Cmd+Shift+Z or Ctrl/Cmd+Y redoes while the chart has focus; text fields\nare left alone. Default: `true`.",
     "default": true
    },
    "wcc": {
     "type": "object",
     "properties": {
      "toolbar": {
       "type": "boolean",
       "description": "Adds undo and redo buttons to the toolbar. Default: `false`.",
       "default": false
      },
      "recordData": {
       "type": "boolean",
       "description": "Also records data updates; alias `chart.wcc.history.recordData`. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": true,
     "description": "West Coast Charts history extensions."
    }
   },
   "additionalProperties": false
  },
  "WccLinkOptions": {
   "type": "object",
   "properties": {
    "id": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Id of the link group: charts with the same id share one set of records and filters; not set uses `chart.group`."
    },
    "group": {
     "type": "string",
     "description": "Not read by the link feature; use `id` (or `chart.group`). Kept for type compatibility."
    },
    "dimension": {
     "x-wcc-type": "function",
     "description": "Key of a record: a string (category), a number (range, binned), `[x, y]` (matrix, for\nheatmaps) or `[stage1, stage2, ...]` (path, for sankey: the record's flow through the stages;\n`null` leaves it out)."
    },
    "type": {
     "type": "string",
     "enum": [
      "category",
      "range",
      "matrix",
      "path"
     ],
     "description": "Kind of dimension; not set is `'range'` when `bins` is set, `'matrix'` on heatmaps, `'path'`\non sankey, else `'category'`."
    },
    "reduce": {
     "anyOf": [
      {
       "const": "count"
      },
      {
       "type": "object",
       "properties": {
        "sum": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "Field summed over the bucket."
        }
       },
       "required": [
        "sum"
       ],
       "additionalProperties": false
      },
      {
       "type": "object",
       "properties": {
        "avg": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "Field averaged over the bucket."
        }
       },
       "required": [
        "avg"
       ],
       "additionalProperties": false
      },
      {
       "type": "object",
       "properties": {
        "min": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "Field whose minimum is taken over the bucket."
        }
       },
       "required": [
        "min"
       ],
       "additionalProperties": false
      },
      {
       "type": "object",
       "properties": {
        "max": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "x-wcc-type": "function"
          }
         ],
         "description": "Field whose maximum is taken over the bucket."
        }
       },
       "required": [
        "max"
       ],
       "additionalProperties": false
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Aggregate of a bucket: `'count'`, `{ sum | avg | min | max: field }` (a property path or a\nfunction of the record) or a function of the bucket's records. Default: `'count'`.",
     "default": "count"
    },
    "bins": {
     "type": "object",
     "properties": {
      "width": {
       "type": "number",
       "description": "Width of a bin in dimension units."
      },
      "count": {
       "type": "number",
       "description": "Number of bins."
      }
     },
     "additionalProperties": false,
     "description": "Binning of a range dimension; makes the chart brushable."
    },
    "order": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "first-seen",
        "asc",
        "desc",
        "value-asc",
        "value-desc"
       ]
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Order of the buckets: `'first-seen'`, `'asc'` / `'desc'` (by key, natural sort),\n`'value-asc'` / `'value-desc'` (by the reduced value over all records, stable while\nother charts filter) or a comparator."
    },
    "seriesName": {
     "type": "string",
     "description": "Name of the series injected from the aggregate. Default: `'Count'`.",
     "default": "Count"
    },
    "dimOpacity": {
     "type": "number",
     "description": "Opacity of marks outside the selection. Default: `0.2`.",
     "default": 0.2
    },
    "wcc": {
     "type": "object",
     "properties": {
      "label": {
       "type": "string",
       "description": "Name of this chart's filter in the summary and announcements; not set uses `title.text` or\nthe chart id."
      },
      "selectMode": {
       "type": "string",
       "enum": [
        "toggle",
        "single",
        "additive-shift"
       ],
       "description": "Click behaviour: `'toggle'` adds or removes a bucket, `'single'` keeps one bucket,\n`'additive-shift'` adds only with Shift. Default: `'toggle'`.",
       "default": "toggle"
      },
      "summary": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "string"
        },
        {
         "x-wcc-type": "Element"
        }
       ],
       "description": "`true` draws a summary bar (record count, filter chips, Clear all) above the plot; a selector\nor element places it elsewhere. Default: `false`.",
       "default": false
      },
      "emptyBuckets": {
       "type": "string",
       "enum": [
        "hide",
        "show"
       ],
       "description": "`'hide'` drops buckets left empty by other filters (selected ones stay). Default: `'show'`.",
       "default": "show"
      },
      "display": {
       "type": "string",
       "enum": [
        "filtered",
        "parts"
       ],
       "description": "`'parts'` keeps the unfiltered totals as data and draws the filtered aggregate as the\nhighlight part. Default: `'filtered'`.",
       "default": "filtered"
      },
      "throttle": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "frame",
          "end"
         ]
        },
        {
         "type": "number"
        }
       ],
       "description": "Live brush updates: `'frame'` once per animation frame, `'end'` only on release, or a minimum\ninterval in milliseconds. Default: `'frame'`.",
       "default": "frame"
      },
      "centre": {
       "type": "boolean",
       "description": "Linked donuts: `false` leaves the centre label alone instead of showing the selection.\nDefault: `true`.",
       "default": true
      },
      "centreLabel": {
       "type": "string",
       "description": "Donut centre label while the chart has no selection of its own; not set uses the locale\nstring `link.total`."
      },
      "heatScale": {
       "type": "boolean",
       "description": "Linked heatmaps: `false` keeps the default heatmap shading instead of the link colour scale.\nDefault: `true`.",
       "default": true
      }
     },
     "additionalProperties": true,
     "description": "West Coast Charts link extensions."
    }
   },
   "additionalProperties": true
  },
  "WccMapOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "map": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "object"
      }
     ],
     "description": "a registered map name, or TopoJSON / GeoJSON"
    },
    "object": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "string"
      }
     ],
     "description": "TopoJSON object name, when there are several"
    },
    "projection": {
     "type": "string",
     "enum": [
      "auto",
      "equalEarth",
      "mercator",
      "equirectangular",
      "albers",
      "albersUsa",
      "orthographic"
     ],
     "description": "Projection; `'auto'` uses the map's own projection hint or `'equalEarth'`. Default: `'auto'`.",
     "default": "auto"
    },
    "rotate": {
     "type": "array",
     "prefixItems": [
      {
       "type": "number"
      },
      {
       "type": "number"
      }
     ],
     "minItems": 2,
     "maxItems": 2,
     "description": "globe centre [lon, lat]"
    },
    "normalize": {
     "type": "object",
     "properties": {
      "by": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "string"
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "Denominator: a key of the data item or of the region's properties, or `(item, { feature }) => number`; not set: no normalisation."
      },
      "per": {
       "type": "number",
       "description": "Multiplier of the ratio (e.g. `100000` for \"per 100k\"). Default: `1`.",
       "default": 1
      },
      "label": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "string"
        }
       ],
       "description": "Tooltip label of the raw total next to the normalised value. Default: `'Total'`.",
       "default": "Total"
      }
     },
     "additionalProperties": false,
     "description": "Per-unit choropleth values: value / `by` * `per` (e.g. per capita)."
    },
    "exclude": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Region ids or names left out of the map (case-insensitive). Default: `['ATA']`.",
     "x-wcc-default": "['ATA']"
    },
    "style": {
     "type": "string",
     "enum": [
      "fill",
      "dots",
      "tiles"
     ],
     "description": "Region drawing: `'fill'` (shapes), `'dots'` (a dot grid clipped to the land) or `'tiles'` (one\nequal tile per region). Default: `'fill'`.",
     "default": "fill"
    },
    "dots": {
     "type": "object",
     "properties": {
      "spacing": {
       "type": "number",
       "description": "Distance between dot centres in px (at least 3). Default: `7`.",
       "default": 7
      },
      "size": {
       "type": "number",
       "description": "Dot diameter as a fraction of the spacing (0.2 to 1). Default: `0.72`.",
       "default": 0.72
      }
     },
     "additionalProperties": false,
     "description": "Dot grid of `style: 'dots'`."
    },
    "tiles": {
     "type": "object",
     "properties": {
      "shape": {
       "type": "string",
       "enum": [
        "square",
        "hex"
       ],
       "description": "`'hex'` or `'square'` tiles. Default: `'hex'`.",
       "default": "hex"
      },
      "gap": {
       "type": "number",
       "description": "Gap between tiles in px. Default: `2.5`.",
       "default": 2.5
      },
      "labels": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "`false` hides the tile labels; a function `({ id, name, value, properties }) => string` sets them. Default: `true` (region id).",
       "default": true
      },
      "layout": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "object",
         "additionalProperties": {
          "type": "array",
          "prefixItems": [
           {
            "type": "number"
           },
           {
            "type": "number"
           }
          ],
          "minItems": 2,
          "maxItems": 2
         }
        }
       ],
       "description": "Grid placement: a built-in layout name (e.g. `'us-states'`) or `{ id: [col, row] }`; not set uses the built-in layout of the map."
      }
     },
     "additionalProperties": false,
     "description": "Tile cartogram of `style: 'tiles'`."
    },
    "sphere": {
     "type": "boolean",
     "description": "Draws the globe outline with a faint 30° graticule behind equalEarth and equirectangular maps.\nDefault: `true`.",
     "default": true
    },
    "colorScale": {
     "type": "object",
     "properties": {
      "type": {
       "type": "string",
       "enum": [
        "linear",
        "log",
        "quantize",
        "diverging"
       ],
       "description": "`'linear'`, `'log'`, `'quantize'` (stepped buckets) or `'diverging'` (around `mid`); a\ndiverging palette implies `'diverging'`. Default: `'linear'`.",
       "default": "linear"
      },
      "palette": {
       "type": "string",
       "description": "Named palette: blue, green, teal, purple, orange, red, gray, heat, viridis, or diverging\nblue-red, green-purple, teal-orange; not set derives a ramp from the theme accent."
      },
      "reverse": {
       "type": "boolean",
       "description": "Reverses the named palette. Default: `false`.",
       "default": false
      },
      "colors": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       ],
       "description": "Own colour stops; win over `palette`."
      },
      "min": {
       "type": "number",
       "description": "Lower end of the scale; not set uses the data minimum."
      },
      "max": {
       "type": "number",
       "description": "Upper end of the scale; not set uses the data maximum."
      },
      "mid": {
       "type": "number",
       "description": "Neutral value of a diverging scale. Default: `0`.",
       "default": 0
      },
      "steps": {
       "type": "number",
       "description": "Number of buckets of a quantize scale (2 to 12). Default: `5`.",
       "default": 5
      },
      "ranges": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "array",
         "items": {
          "type": "object",
          "properties": {
           "from": {
            "type": "number",
            "description": "Lowest value of the range (inclusive); not set: open below."
           },
           "to": {
            "type": "number",
            "description": "Highest value of the range (inclusive); not set: open above."
           },
           "color": {
            "type": "string",
            "description": "Colour of the range; not set takes the next scale colour."
           },
           "name": {
            "type": "string",
            "description": "Legend name of the range."
           },
           "pattern": {
            "anyOf": [
             {
              "type": "string",
              "enum": [
               "cross",
               "horizontal",
               "vertical",
               "grid",
               "dots",
               "hatch",
               "hatch-reverse"
              ]
             },
             {
              "type": "object",
              "properties": {
               "type": {
                "type": "string",
                "description": "Pattern: `'hatch'`, `'hatch-reverse'`, `'cross'`, `'dots'`, `'grid'`, `'vertical'` or `'horizontal'`; other values draw no pattern."
               },
               "color": {
                "type": "string",
                "description": "Ink of the lines or dots; not set uses a contrasting theme ink."
               },
               "background": {
                "type": "string",
                "description": "Fill behind the pattern; not set uses the region colour."
               },
               "size": {
                "type": "number",
                "description": "Pattern cell in px (3 to 40). Default: `6`, `7` for dots.",
                "default": 6
               },
               "width": {
                "type": "number",
                "description": "Line width or dot radius in px (0.3 to 10). Default: `1.1`, `1.4` for dots.",
                "default": 1.1
               },
               "angle": {
                "type": "number",
                "description": "Rotation in degrees. Default: `45` for hatch, `-45` for hatch-reverse, otherwise `0`.",
                "default": 45
               }
              },
              "required": [
               "type"
              ],
              "additionalProperties": false
             }
            ],
            "description": "Pattern drawn over the range's regions."
           }
          },
          "additionalProperties": false
         }
        }
       ],
       "description": "Explicit value ranges, each with its own colour (and legend entry); win over the scale type."
      },
      "nullColor": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "string"
        }
       ],
       "description": "Fill of regions without a value; not set uses a light theme grey."
      },
      "patterns": {
       "type": "boolean",
       "description": "Adds automatic patterns to every bucket but the first (ranges and quantize scales), for print\nand colour-blind readers. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Colour scale of choropleth values."
    },
    "borders": {
     "type": "object",
     "properties": {
      "width": {
       "type": "number",
       "description": "Outline width in px. Default: `0.6` (`0.5` on dark themes).",
       "default": 0.6
      },
      "color": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "string"
        }
       ],
       "description": "Outline colour; not set uses the surface colour (none for dots)."
      }
     },
     "additionalProperties": false,
     "description": "Region outlines."
    },
    "bubble": {
     "type": "object",
     "properties": {
      "minRadius": {
       "type": "number",
       "description": "Smallest bubble radius in px. Default: `3`.",
       "default": 3
      },
      "maxRadius": {
       "type": "number",
       "description": "Largest bubble radius in px. Default: `26`.",
       "default": 26
      },
      "opacity": {
       "type": "number",
       "description": "Fill opacity of bubbles. Default: `0.62`.",
       "default": 0.62
      }
     },
     "additionalProperties": false,
     "description": "Bubble layers sized by value."
    },
    "hexbin": {
     "type": "object",
     "properties": {
      "radius": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Hexagon radius in px; `'auto'` uses 1/60 of the map width (5 to 14 px). Default: `'auto'`.",
       "default": "auto"
      },
      "scaleSize": {
       "type": "boolean",
       "description": "Scales each hexagon by its count as well as colouring it. Default: `true`.",
       "default": true
      },
      "colors": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       ],
       "description": "Colour stops of the count ramp; not set derives three stops from the layer colour."
      }
     },
     "additionalProperties": false,
     "description": "Hexbin layers that bin points into hexagons."
    },
    "arcs": {
     "type": "object",
     "properties": {
      "curvature": {
       "type": "number",
       "description": "Bulge of the arcs relative to their length. Default: `0.28`.",
       "default": 0.28
      },
      "width": {
       "type": "array",
       "prefixItems": [
        {
         "type": "number"
        },
        {
         "type": "number"
        }
       ],
       "minItems": 2,
       "maxItems": 2,
       "description": "`[min, max]` stroke width in px, scaled by the square root of the value. Default: `[1, 3.5]`.",
       "default": [
        1,
        3.5
       ]
      },
      "flow": {
       "type": "boolean",
       "description": "Animates a moving dash along each arc while animations are on. Default: `true`.",
       "default": true
      },
      "endpoints": {
       "type": "boolean",
       "description": "Draws dots at both ends of each arc. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Flow arc layers (from, to, value)."
    },
    "markers": {
     "type": "object",
     "properties": {
      "shape": {
       "type": "string",
       "enum": [
        "circle",
        "square",
        "star",
        "diamond",
        "triangle",
        "pin"
       ],
       "description": "Marker shape. Default: `'pin'`.",
       "default": "pin"
      },
      "size": {
       "type": "number",
       "description": "Marker size in px. Default: `24`.",
       "default": 24
      },
      "labels": {
       "type": "boolean",
       "description": "Writes the point name next to each marker (a layer or point setting wins). Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Fixed-size point markers."
    },
    "routes": {
     "type": "object",
     "properties": {
      "width": {
       "type": "number",
       "description": "Line width in px (a layer or route setting wins). Default: `2.5`.",
       "default": 2.5
      },
      "geodesic": {
       "type": "boolean",
       "description": "Follows great circles between stops instead of straight lines. Default: `true`.",
       "default": true
      },
      "stops": {
       "type": "boolean",
       "description": "Draws a dot at each stop. Default: `true`.",
       "default": true
      },
      "arrows": {
       "type": "boolean",
       "description": "Adds direction arrows along the route. Default: `true`.",
       "default": true
      },
      "labels": {
       "type": "boolean",
       "description": "Writes the stop names. Default: `false`.",
       "default": false
      },
      "dash": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "SVG dash array of the route line; not set draws it solid."
      }
     },
     "additionalProperties": false,
     "description": "Route layers through ordered stops."
    },
    "annotations": {
     "type": "array",
     "items": {
      "type": "object",
      "additionalProperties": true
     },
     "description": "Callouts, free text and region notes, placed by `region`, `at: [lon, lat]` or `lon`/`lat`; kept\nat screen size while zooming. Default: `[]`.",
     "default": []
    },
    "legend": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the legend. Default: `true`.",
       "default": true
      },
      "title": {
       "anyOf": [
        {
         "type": "null"
        },
        {
         "type": "string"
        }
       ],
       "description": "Legend title; not set uses the layer name."
      }
     },
     "additionalProperties": false,
     "description": "Colour or size legend under the map."
    },
    "fit": {
     "type": "string",
     "enum": [
      "auto",
      "map",
      "data"
     ],
     "description": "Framing: `'map'` shows the whole map, `'data'` frames the data, `'auto'` frames point, arc and\nroute layers but shows the whole map for choropleths. Default: `'auto'`.",
     "default": "auto"
    },
    "fitParts": {
     "type": "string",
     "enum": [
      "all",
      "largest"
     ],
     "description": "Geometry used only for data framing: all region polygons, or each region's largest polygon. Drawing retains every polygon. Default: `'all'`.",
     "default": "all"
    },
    "zoom": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Enables zoom and pan of the view. Default: `true`.",
       "default": true
      },
      "wheel": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "string"
        }
       ],
       "description": "Wheel zoom: `'ctrl'` zooms only while Ctrl or Cmd is held, `true` on every wheel event, `false` never. Default: `'ctrl'`.",
       "default": "ctrl"
      },
      "min": {
       "type": "number",
       "description": "Smallest zoom factor. Default: `0.25` for the network, `0.05` for the tree.",
       "default": 0.25
      },
      "max": {
       "type": "number",
       "description": "Largest zoom factor. Default: `8` for the network, `3` for the tree.",
       "default": 8
      },
      "toRegion": {
       "type": "boolean",
       "description": "A double click on a region zooms to that region (instead of zooming in one step). Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Zoom and pan (scale 1 to 16 by default)."
    },
    "controls": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the zoom buttons. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "On-map zoom buttons."
    },
    "formatter": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "`(value) => string` for values in tooltips and legend; not set uses `tooltip.y.formatter` or a\ncompact number."
    },
    "drilldown": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "`false` switches drill-down off. Default: `true`.",
       "default": true
      },
      "breadcrumb": {
       "type": "boolean",
       "description": "Shows the breadcrumb of the opened levels. Default: `true`.",
       "default": true
      },
      "rootLabel": {
       "type": "string",
       "description": "Breadcrumb label of the top level; not set uses `'Overview'` (sankey) or the map name."
      },
      "load": {
       "x-wcc-type": "function",
       "description": "load(item, info) returns a level or a Promise of one"
      },
      "drillable": {
       "anyOf": [
        {
         "type": "array",
         "items": {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ]
         }
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "ids that can be opened, or a test; default: every item when only load is set"
      },
      "regions": {
       "type": "object",
       "additionalProperties": {
        "anyOf": [
         {
          "const": true
         },
         {
          "type": "object",
          "properties": {
           "map": {
            "anyOf": [
             {
              "type": "string"
             },
             {
              "type": "object"
             }
            ],
            "description": "Map name or TopoJSON / GeoJSON of the level."
           },
           "series": {
            "type": "array",
            "items": {},
            "description": "Series of the level."
           },
           "label": {
            "type": "string",
            "description": "Breadcrumb label of the level; not set uses the region name."
           },
           "colorScale": {
            "type": "object",
            "description": "Colour scale of the level."
           }
          },
          "additionalProperties": false
         }
        ]
       },
       "description": "Levels per region id: `{ map, series, label, colorScale }`, or `true` to load the level via `load`."
      }
     },
     "additionalProperties": false,
     "description": "Drill-down into regions."
    }
   },
   "additionalProperties": false
  },
  "WccMarimekkoOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "gap": {
     "type": "number",
     "description": "Gap between columns in px (0 to 12). Default: `2`.",
     "default": 2
    },
    "radius": {
     "type": "number",
     "description": "Corner radius of the cells in px (0 to 8). Default: `3`.",
     "default": 3
    },
    "fill": {
     "type": "string",
     "enum": [
      "soft",
      "solid"
     ],
     "description": "`'soft'` uses calmer tones of the palette for the large cells, `'solid'` the palette as is (a\nseries `color` is always kept). Default: `'soft'`.",
     "default": "soft"
    },
    "widths": {
     "anyOf": [
      {
       "const": "total"
      },
      {
       "type": "array",
       "items": {
        "type": "number"
       }
      }
     ],
     "description": "Column widths: `'total'` follows the column totals; an array sets explicit column weights. Default: `'total'`.",
     "default": "total"
    },
    "sort": {
     "type": "string",
     "enum": [
      "none",
      "asc",
      "desc"
     ],
     "description": "Column order: data order (`'none'`), or by column width `'asc'` / `'desc'`. Default: `'none'`.",
     "default": "none"
    },
    "dataLabels": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the cell labels. Default: `true`.",
       "default": true
      },
      "showName": {
       "type": "boolean",
       "description": "Adds the series name to the cell label when it fits. Default: `true`.",
       "default": true
      },
      "showPercent": {
       "type": "boolean",
       "description": "Shows the cell's share of its column; `false` shows the cell value instead. Default: `true`.",
       "default": true
      },
      "minWidth": {
       "type": "number",
       "description": "Narrowest cell in px that gets a label. Default: `34`.",
       "default": 34
      },
      "minHeight": {
       "type": "number",
       "description": "Lowest cell in px that gets a label. Default: `18`.",
       "default": 18
      },
      "outside": {
       "type": "boolean",
       "description": "A last column too narrow for its labels gets them in a gutter right of the plot. Default: `true`.",
       "default": true
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(share, { seriesIndex, category, value, w }) => string` for the value text of a cell."
      }
     },
     "additionalProperties": false,
     "description": "Labels inside the cells."
    },
    "columnLabels": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the column names. Default: `true`.",
       "default": true
      },
      "showTotal": {
       "type": "boolean",
       "description": "Adds the column total under the name. Default: `true`.",
       "default": true
      },
      "showShare": {
       "type": "boolean",
       "description": "Adds the column's share of the whole under the name. Default: `true`.",
       "default": true
      },
      "wrap": {
       "type": "boolean",
       "description": "Wraps a name that does not fit onto two lines at a word break. Default: `true`.",
       "default": true
      },
      "abbreviate": {
       "type": "boolean",
       "description": "Abbreviates a name that still does not fit (initials; the full name is the hover title). Default: `true`.",
       "default": true
      },
      "abbreviations": {
       "type": "object",
       "additionalProperties": {
        "type": "string"
       },
       "description": "Own abbreviations per column name, e.g. `{ 'North America': 'NA' }`."
      }
     },
     "additionalProperties": false,
     "description": "Column names under the plot."
    },
    "yAxis": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the 0 to 100 % axis. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Percentage axis on the left."
    },
    "legend": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the legend (with two or more series). Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Series legend."
    }
   },
   "additionalProperties": false
  },
  "WccNarrativeOptions": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "Turns on the narrative player. Default: `false`.",
     "default": false
    },
    "source": {
     "type": "string",
     "enum": [
      "frames",
      "record"
     ],
     "description": "`'frames'` replays the supplied frames; `'record'` records the chart's own data updates.\nDefault: `'frames'`.",
     "default": "frames"
    },
    "frames": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "t": {
        "description": "Time or key of the frame, usable with `seek({ t })`."
       },
       "series": {
        "type": "array",
        "items": {},
        "description": "Series of the frame, in the chart's series format."
       },
       "label": {
        "type": "string",
        "description": "Frame label, shown as the watermark."
       },
       "caption": {
        "type": "string",
        "description": "Caption shown and announced when the frame is reached."
       },
       "options": {
        "type": "object",
        "additionalProperties": true,
        "description": "Options applied when the frame is reached (`updateOptions` patch)."
       },
       "annotations": {
        "type": "object",
        "additionalProperties": true,
        "description": "Annotations shown while the frame is current."
       }
      },
      "required": [
       "series"
      ],
      "additionalProperties": false
     },
     "description": "Frames to replay with `source: 'frames'`. Default: `[]`.",
     "default": []
    },
    "maxFrames": {
     "type": "number",
     "description": "Ring-buffer size of `source: 'record'`; older frames are dropped. Default: `600`.",
     "default": 600
    },
    "interpolate": {
     "type": "boolean",
     "description": "Draws in-between values while scrubbing between frames. Default: `true`.",
     "default": true
    },
    "keyBy": {
     "anyOf": [
      {
       "const": "x"
      },
      {
       "type": "null"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Point identity across frames (`'x'` or a function); also used as the morph key of updates\nunless the app sets one. Default: `null` (by index).",
     "default": null
    },
    "frameDuration": {
     "type": "number",
     "description": "Time per frame during playback, in milliseconds. Default: `800`.",
     "default": 800
    },
    "loop": {
     "type": "boolean",
     "description": "Restarts from the first frame after the last. Default: `false`.",
     "default": false
    },
    "autoplay": {
     "type": "boolean",
     "description": "Starts playback on mount, unless reduced motion is preferred. Default: `false`.",
     "default": false
    },
    "transport": {
     "type": "boolean",
     "description": "Draws the transport bar (play, scrubber, live). Default: `true`.",
     "default": true
    },
    "watermark": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "auto",
        "label"
       ]
      },
      {
       "const": false
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Large background text of the current frame: `'auto'` (frame label for frames, off for record),\n`'label'`, `false` or a function. Default: `'auto'`.",
     "default": "auto"
    },
    "captions": {
     "type": "boolean",
     "description": "Shows frame captions. Default: `true`.",
     "default": true
    },
    "liveBehaviour": {
     "type": "string",
     "enum": [
      "buffer",
      "follow"
     ],
     "description": "New recorded data while viewing an older frame: `'buffer'` stays on that frame behind a Live\nbutton, `'follow'` jumps to the newest. Default: `'buffer'`.",
     "default": "buffer"
    }
   },
   "additionalProperties": false
  },
  "WccNetworkFacetOptions": {
   "type": "object",
   "properties": {
    "levels": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "object",
          "properties": {
           "name": {
            "type": "string"
           },
           "description": {
            "type": "string"
           }
          },
          "required": [
           "name"
          ],
          "additionalProperties": false
         }
        ]
       }
      }
     ],
     "description": "Level names, centre first (`['Core', 'Services', …]` or `{ name, description }`); `'auto'` names them Core, Level 1, Level 2 … Default: `'auto'`.",
     "default": "auto"
    },
    "core": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Node ids of the core when no node has `level: 0`; not set uses the most connected node."
    },
    "sides": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "number"
      }
     ],
     "description": "Polygon sides; `'auto'` = the group count for 5–12 groups, twice it for 2–4, 6 for one group. Default: `'auto'`.",
     "default": "auto"
    },
    "rotation": {
     "type": "number",
     "description": "Turns the shells, degrees; 0 puts a vertex at 12 o'clock. Default: `0`.",
     "default": 0
    },
    "sectors": {
     "type": "string",
     "enum": [
      "auto",
      "equal",
      "weighted"
     ],
     "description": "Sector size per group: `'equal'`, `'weighted'` (by its most crowded shell) or `'auto'`. Default: `'auto'`.",
     "default": "auto"
    },
    "order": {
     "type": "string",
     "enum": [
      "data",
      "crossings"
     ],
     "description": "`'crossings'` reorders nodes inside a facet (barycentric sweeps) to reduce crossings; `'data'` keeps the data order. Default: `'crossings'`.",
     "default": "crossings"
    },
    "coreRadius": {
     "type": "number",
     "description": "Level-1 radius as a fraction of the outer radius. Default: `0.24`.",
     "default": 0.24
    },
    "bundle": {
     "type": "number",
     "description": "Pull of plain edges towards the centre, 0 (straight) to 1; edges between two facets route through both facets' anchors. Default: `0.65`.",
     "default": 0.65
    },
    "edges": {
     "type": "object",
     "properties": {
      "degreeAlpha": {
       "type": "boolean",
       "description": "Fades edges of hubs: opacity × clamp(2 / √(max endpoint degree), 0.35, 1). Default: `true`.",
       "default": true
      },
      "lod": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "boolean"
        }
       ],
       "description": "Level of detail for cross-facet edges, `'auto'` from 300 nodes: at overview zoom they fade (ribbons stand for them); zoomed in, only those with an end in view are drawn (hover / highlight still show all of a node's links). Default: `'auto'`.",
       "default": "auto"
      },
      "lodZoom": {
       "type": "number",
       "description": "Zoom factor from which the individual cross-facet edges come back. Default: `1.8`.",
       "default": 1.8
      },
      "ribbons": {
       "type": "boolean",
       "description": "With lod at overview zoom: one ribbon per facet pair, width by its link count (title: `A – B: n links`). Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Plain edge rendering in dense estates."
    },
    "shells": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws the shell outlines. Default: `true`.",
       "default": true
      },
      "labels": {
       "type": "boolean",
       "description": "Writes the level name on each shell. Default: `true`.",
       "default": true
      },
      "opacity": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Outline opacity; `'auto'` follows the theme. Default: `'auto'`.",
       "default": "auto"
      }
     },
     "additionalProperties": false,
     "description": "Shell polygons."
    },
    "facets": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws the facets. Default: `true`.",
       "default": true
      },
      "opacity": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Fill opacity; `'auto'` = 0.07 light, 0.11 dark. Default: `'auto'`.",
       "default": "auto"
      },
      "labels": {
       "type": "boolean",
       "description": "Writes the group names outside the outer shell. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Filled facet sectors, one per group."
    },
    "paths": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws causal edges and paths. Default: `true`.",
       "default": true
      },
      "width": {
       "type": "number",
       "description": "Line width in px. Default: `2`.",
       "default": 2
      },
      "dash": {
       "type": "array",
       "prefixItems": [
        {
         "type": "number"
        },
        {
         "type": "number"
        }
       ],
       "minItems": 2,
       "maxItems": 2,
       "description": "Dash pattern `[dash, gap]` in px. Default: `[6, 5]`.",
       "default": [
        6,
        5
       ]
      },
      "curvature": {
       "type": "number",
       "description": "Sideways bow of a hop (fraction of its length). Default: `0.22`.",
       "default": 0.22
      },
      "arrows": {
       "type": "boolean",
       "description": "Arrow heads at the effect end. Default: `true`.",
       "default": true
      },
      "flow": {
       "type": "boolean",
       "description": "Dashes flow from cause to effect (off under reduced motion). Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Causal edges and `paths`."
    },
    "markers": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws markers and badges. Default: `true`.",
       "default": true
      },
      "colors": {
       "type": "object",
       "properties": {
        "critical": {
         "type": "string"
        },
        "warning": {
         "type": "string"
        },
        "info": {
         "type": "string"
        },
        "ok": {
         "type": "string"
        }
       },
       "additionalProperties": false,
       "description": "Colours per severity; not set uses the theme's negative / warning / accent / positive."
      }
     },
     "additionalProperties": false,
     "description": "Severity / anomaly markers and badges."
    },
    "legend": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the level legend. Default: `true`.",
       "default": true
      },
      "title": {
       "type": "string",
       "description": "Leads the legend row (e.g. your word for \"Levels\")."
      }
     },
     "additionalProperties": false,
     "description": "Level legend in the legend row above the plot (replaces the group legend; needs `legend.show` of the network too)."
    }
   },
   "additionalProperties": false
  },
  "WccNetworkOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "renderer": {
     "type": "string",
     "enum": [
      "auto",
      "svg",
      "canvas"
     ],
     "description": "`'svg'` or `'canvas'`; `'auto'` uses canvas from `canvasThreshold` nodes. Default: `'auto'`.",
     "default": "auto"
    },
    "canvasThreshold": {
     "type": "number",
     "description": "Node count above which `renderer: 'auto'` switches to canvas. Default: `1200`.",
     "default": 1200
    },
    "nodes": {
     "type": "object",
     "properties": {
      "minRadius": {
       "type": "number",
       "description": "Smallest node radius in px. Default: `4`.",
       "default": 4
      },
      "maxRadius": {
       "type": "number",
       "description": "Largest node radius in px (graphs over 1000 nodes cap it at 8). Default: `16`.",
       "default": 16
      },
      "sizeBy": {
       "type": "string",
       "enum": [
        "none",
        "auto",
        "value",
        "degree"
       ],
       "description": "Node size from `'value'`, `'degree'` (number of links) or `'none'`; `'auto'` uses value when a node has one, else degree. Default: `'auto'`.",
       "default": "auto"
      },
      "strokeWidth": {
       "type": "number",
       "description": "Width of the ring around each node in px. Default: `1.5`.",
       "default": 1.5
      }
     },
     "additionalProperties": false,
     "description": "Node circles."
    },
    "edges": {
     "type": "object",
     "properties": {
      "width": {
       "type": "array",
       "prefixItems": [
        {
         "type": "number"
        },
        {
         "type": "number"
        }
       ],
       "minItems": 2,
       "maxItems": 2,
       "description": "`[min, max]` line width in px, scaled by edge weight. Default: `[0.8, 3]`.",
       "default": [
        0.8,
        3
       ]
      },
      "opacity": {
       "type": "number",
       "description": "Edge opacity; not set uses 0.3 (0.34 in dark mode, 0.16 over 1000 nodes)."
      },
      "bundle": {
       "type": "boolean",
       "description": "Bundles edges between groups through the group centres. Default: `false`.",
       "default": false
      },
      "bundleStrength": {
       "type": "number",
       "description": "How tightly bundled edges follow the group centres (0 to 1). Default: `0.85`.",
       "default": 0.85
      },
      "curvature": {
       "type": "number",
       "description": "Bend of the edges, 0 straight. Default: `0`.",
       "default": 0
      }
     },
     "additionalProperties": false,
     "description": "Edge lines."
    },
    "layout": {
     "type": "object",
     "properties": {
      "type": {
       "type": "string",
       "enum": [
        "force",
        "facet",
        "preset"
       ],
       "description": "`'force'`: the force simulation. `'facet'`: a deterministic projection on concentric regular\npolygon shells (core in the centre, groups as filled facet sectors, causal paths across;\noptions under `facet`). Default: `'force'`.",
       "default": "force"
      },
      "linkDistance": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Target edge length; `'auto'` derives it from the node sizes. Default: `'auto'`.",
       "default": "auto"
      },
      "charge": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Repulsion between nodes; `'auto'` derives it from the node sizes. Default: `'auto'`.",
       "default": "auto"
      },
      "groupStrength": {
       "type": "number",
       "description": "Pull of nodes towards their group centre (with two or more groups). Default: `0.1`.",
       "default": 0.1
      },
      "iterations": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Simulation steps; `'auto'` runs until the layout has cooled down. Default: `'auto'`.",
       "default": "auto"
      },
      "warmup": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "number"
        }
       ],
       "description": "Steps computed before the first paint; `'auto'` uses 40 from 600 nodes and 90 from 2000. Default: `'auto'`.",
       "default": "auto"
      }
     },
     "additionalProperties": false,
     "description": "Force layout."
    },
    "groups": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` treats all nodes as one group: no group colours, clustering or legend. Default: `true`.",
       "default": true
      },
      "hulls": {
       "type": "boolean",
       "description": "Draws a soft rounded hull behind each group (svg renderer, two or more groups). Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Node groups (`group` in the node data)."
    },
    "labels": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows labels, biggest nodes first, without overlaps. Default: `true`.",
       "default": true
      },
      "max": {
       "type": "number",
       "description": "Most labels at the fit zoom (fewer in dense graphs, more when zoomed in). Default: `40`.",
       "default": 40
      },
      "minZoom": {
       "type": "number",
       "description": "Zoom from which small nodes get labels too. Default: `1.6`.",
       "default": 1.6
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(name, { node, w }) => string` for the label text."
      },
      "readability": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "none",
          "halo",
          "pill",
          "auto",
          "hide"
         ]
        },
        {
         "type": "boolean"
        },
        {
         "type": "object",
         "properties": {
          "mode": {
           "type": "string",
           "enum": [
            "none",
            "halo",
            "pill",
            "auto",
            "hide"
           ],
           "description": "'auto' (default where on): nothing for labels off the marks, a contrasting text colour over one fill, a pill over mixed fills; 'hide' = skip labels that sit on marks"
          },
          "fallback": {
           "type": "string",
           "enum": [
            "halo",
            "pill",
            "hide"
           ],
           "description": "what 'auto' escalates to over mixed fills or when no text colour reaches minRatio. Default 'pill'"
          },
          "enabled": {
           "type": "boolean",
           "description": "false switches the treatment off for this label kind"
          },
          "contrast": {
           "type": "boolean",
           "description": "swap the text to `light`/`dark` when it misses minRatio against what is under it (any mode)"
          },
          "minRatio": {
           "type": "number",
           "description": "WCAG 2 contrast ratio to reach. Default 4.5"
          },
          "light": {
           "type": "string",
           "description": "text/backdrop colour pair used by contrast and 'auto' fills. Defaults '#ffffff' / '#111827'"
          },
          "dark": {
           "type": "string",
           "description": "Dark colour of the pair. Default: `'#111827'`.",
           "default": "#111827"
          },
          "background": {
           "type": "string",
           "description": "colour under the chart; 'auto' = chart.background, else the first opaque ancestor"
          },
          "halo": {
           "type": "object",
           "properties": {
            "width": {
             "type": "number",
             "description": "Outline width in pixels. Default: `3`.",
             "default": 3
            },
            "color": {
             "type": "string",
             "description": "Outline colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
             "default": "auto"
            },
            "opacity": {
             "type": "number",
             "description": "Outline opacity (0 to 1). Default: `0.92`.",
             "default": 0.92
            },
            "blur": {
             "type": "number",
             "description": "Blur in pixels; above 0 the outline becomes a soft glow. Default: `0`.",
             "default": 0
            }
           },
           "additionalProperties": false,
           "description": "outline behind the glyphs; blur > 0 makes it a soft glow. Defaults width 3, color 'auto' (chart background), opacity 0.92"
          },
          "pill": {
           "type": "object",
           "properties": {
            "fill": {
             "type": "string",
             "description": "Box colour; 'auto' uses the colour under the label or a contrasting one. Default: `'auto'`.",
             "default": "auto"
            },
            "opacity": {
             "type": "number",
             "description": "Box opacity (0 to 1). Default: `0.9`.",
             "default": 0.9
            },
            "radius": {
             "type": "number",
             "description": "Corner radius in pixels. Default: `4`.",
             "default": 4
            },
            "padding": {
             "anyOf": [
              {
               "type": "number"
              },
              {
               "type": "array",
               "prefixItems": [
                {
                 "type": "number"
                },
                {
                 "type": "number"
                }
               ],
               "minItems": 2,
               "maxItems": 2
              }
             ],
             "description": "Space around the text in pixels: one number, or [vertical, horizontal]. Default: `[1, 4]`.",
             "default": [
              1,
              4
             ]
            },
            "stroke": {
             "type": "string",
             "description": "Outline colour of the box. Default: `'none'`.",
             "default": "none"
            },
            "strokeWidth": {
             "type": "number",
             "description": "Outline width in pixels. Default: `1`.",
             "default": 1
            },
            "offset": {
             "type": "array",
             "prefixItems": [
              {
               "type": "number"
              },
              {
               "type": "number"
              }
             ],
             "minItems": 2,
             "maxItems": 2,
             "description": "Shift of the box as [dx, dy] in pixels. Default: `[0, 0]`.",
             "default": [
              0,
              0
             ]
            }
           },
           "additionalProperties": false,
           "description": "backdrop box. padding = [vertical, horizontal]; offset = [dx, dy] px. Defaults fill 'auto', opacity 0.9, radius 4, padding [1, 4]"
          },
          "shadow": {
           "anyOf": [
            {
             "type": "boolean"
            },
            {
             "type": "object",
             "properties": {
              "dx": {
               "type": "number",
               "description": "Horizontal shadow offset in pixels. Default: `0`.",
               "default": 0
              },
              "dy": {
               "type": "number",
               "description": "Vertical shadow offset in pixels. Default: `1`.",
               "default": 1
              },
              "blur": {
               "type": "number",
               "description": "Shadow blur in pixels. Default: `2`.",
               "default": 2
              },
              "color": {
               "type": "string",
               "description": "Shadow colour. Default: `'#000000'`.",
               "default": "#000000"
              },
              "opacity": {
               "type": "number",
               "description": "Shadow opacity (0 to 1). Default: `0.35`.",
               "default": 0.35
              }
             },
             "additionalProperties": false
            }
           ],
           "description": "drop shadow on the pill (on the text in halo mode)"
          },
          "raise": {
           "type": "boolean",
           "description": "axis labels sitting on marks are moved above the series (default true)"
          },
          "each": {
           "x-wcc-type": "function",
           "description": "per label: return an override (or 'none') for this one label; called only when set"
          }
         },
         "additionalProperties": false
        }
       ],
       "description": "Facet layout: treatment of labels over facets and shell lines (pill by default; full options with features/readability). Default: `'auto'`.",
       "default": "auto"
      }
     },
     "additionalProperties": false,
     "description": "Node labels."
    },
    "drag": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Lets the user drag nodes. Default: `true`.",
       "default": true
      },
      "pin": {
       "type": "boolean",
       "description": "Keeps a dragged node where it was dropped. Default: `false`.",
       "default": false
      }
     },
     "additionalProperties": false,
     "description": "Dragging nodes."
    },
    "zoom": {
     "$ref": "#/$defs/WccZoomOptions",
     "description": "Zoom and pan of the network view."
    },
    "legend": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the group legend (with two or more groups). Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Group legend."
    },
    "controls": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the zoom buttons. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "On-chart zoom buttons."
    },
    "facet": {
     "$ref": "#/$defs/WccNetworkFacetOptions",
     "description": "Facet layout (`layout.type: 'facet'`). Node data may carry `level` (0 = centre), `severity`\n(`'critical' | 'warning' | 'info' | 'ok'`), `anomaly` (`true` or a short text), `badge`,\n`labelPriority` (`true`: always labelled, like warnings) and `keys`. Label priority (any network\nlayout): highlighted, then critical, then warning / anomaly / labelPriority – these labels are never\ndropped for the label budget or the zoom threshold. Edges `causal: true`; a series `paths: [{ name, nodes, severity, color }]`."
    }
   },
   "additionalProperties": false
  },
  "WccOrientOptions": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "Toolbar buttons (rotate left / right, reset), the `[` `]` and Home keys and picking a segment\n(double-click, Shift+Enter on a focused item). The `chart.orient` API works without it.\nDefault: `false`; `chart.orient: true` turns it on.",
     "default": false
    },
    "angle": {
     "type": "number",
     "description": "Turn in degrees, clockwise from the default orientation (negative = counter-clockwise).\nSet on create or in `updateOptions`; the turn then stays across updates. Default: `0`.",
     "default": 0
    },
    "toolbar": {
     "type": "boolean",
     "description": "Rotate-left, rotate-right and reset buttons (the toolbar, or a small bar of their own). Default: `true`.",
     "default": true
    },
    "keyboard": {
     "type": "boolean",
     "description": "`[` / `]` turn by one step, Home resets a turned chart, Shift+Enter turns the focused item to `target`. Default: `true`.",
     "default": true
    },
    "pick": {
     "type": "boolean",
     "description": "Double-click a segment (or Shift+Enter on a focused one) to turn it to `target`. Default: `true`.",
     "default": true
    },
    "step": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "number"
      }
     ],
     "description": "One step of the buttons, keys and `rotateBy({ steps })` in degrees; `'auto'` = a time window\nof whole segments close to 45° (3 h on a 24 h clock, a day on a week). Default: `'auto'`.",
     "default": "auto"
    },
    "snap": {
     "type": "boolean",
     "description": "`rotateBy(degrees)` moves by whole segments. Default: `true`.",
     "default": true
    },
    "target": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "top",
        "right",
        "bottom",
        "left"
       ]
      },
      {
       "type": "number"
      }
     ],
     "description": "Where a picked segment goes: `'top'`, `'right'`, `'bottom'`, `'left'` or degrees clockwise from 12 o'clock. Default: `'top'`.",
     "default": "top"
    }
   },
   "additionalProperties": false
  },
  "WccPremiumPlugin": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string",
     "description": "Plugin id (state key and warnings); not set uses `plugin-<index>`."
    },
    "defaults": {
     "type": "object",
     "additionalProperties": true,
     "description": "Default options of the plugin; the `[nameOrPlugin, options]` form overrides them."
    },
    "reserve": {
     "x-wcc-type": "function",
     "description": "`(p) => { top, right, bottom, left }`: space in px taken from the plot before layout."
    },
    "afterRender": {
     "x-wcc-type": "function",
     "description": "`(p)`: called after each render; draw into `p.layer()` and bind events with `p.on()`."
    },
    "event": {
     "x-wcc-type": "function",
     "description": "`(name, e, payload, p)`: called for every chart event; returning `false` cancels a cancelable\none."
    },
    "tooltip": {
     "x-wcc-type": "function",
     "description": "`(content, p) => content`: changes the tooltip content (rows, footer, …)."
    },
    "describe": {
     "x-wcc-type": "function",
     "description": "`(p) => string` appended to the screen-reader summary."
    },
    "destroy": {
     "x-wcc-type": "function",
     "description": "`(p)`: called before each redraw and on destroy."
    }
   },
   "additionalProperties": false
  },
  "WccQuintLane": {
   "type": "object",
   "properties": {
    "id": {
     "type": "string",
     "description": "Lane id; series name it in `lane`."
    },
    "kind": {
     "type": "string",
     "enum": [
      "heatmap",
      "events",
      "budget",
      "lines",
      "stacked"
     ],
     "description": "`'events'` columns (counts per slot, colour = error rate), `'heatmap'` one strip per series, `'budget'` error budget left per series (%), `'lines'`, `'stacked'` areas."
    },
    "title": {
     "type": "string",
     "description": "Lane title. Default: the kind's name."
    },
    "unit": {
     "type": "string",
     "description": "Unit of the values, used on the lane, in tooltips, the CSV export and describe(): `'requests / 10 min'`, `'€ / h'`, `'ms'`, `'%'`."
    },
    "aggregate": {
     "type": "string",
     "enum": [
      "last",
      "sum",
      "max",
      "min",
      "mean"
     ],
     "description": "How the values add up over time in describe() and the a11y items. Default: events `'sum'`, budget `'last'`, others `'mean'`."
    },
    "color": {
     "type": "string",
     "description": "Lane colour (events columns without errorRate, heatmap ramp)."
    },
    "max": {
     "type": "number",
     "description": "Upper end of the value axis; not set uses the data."
    },
    "height": {
     "type": "number",
     "description": "Lane height in px; not set shares the free height (events 1, lines 1.25, stacked 1)."
    }
   },
   "required": [
    "id",
    "kind"
   ],
   "additionalProperties": false
  },
  "WccQuintOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "time": {
     "type": "object",
     "properties": {
      "start": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "First slot: ISO string or ms."
      },
      "step": {
       "type": "number",
       "description": "Slot length in ms."
      }
     },
     "additionalProperties": false,
     "description": "The slots: slot i covers `start + i × step` to `start + (i + 1) × step`."
    },
    "lanes": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/WccQuintLane"
     },
     "description": "The lanes, top to bottom."
    },
    "markers": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "time": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "kind": {
        "type": "string",
        "enum": [
         "deploy",
         "pipeline"
        ]
       },
       "label": {
        "type": "string"
       },
       "keys": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "array",
          "items": {
           "type": "string"
          }
         }
        ]
       },
       "emphasis": {
        "type": "boolean"
       }
      },
      "required": [
       "time"
      ],
      "additionalProperties": false
     },
     "description": "Deploys (◆) and pipeline runs (●) on the events lane. The deploy within 2 h before the first incident that shares one of its keys is marked as the likely cause."
    },
    "incidents": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "from": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "to": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "label": {
        "type": "string"
       },
       "keys": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "array",
          "items": {
           "type": "string"
          }
         }
        ]
       }
      },
      "required": [
       "from"
      ],
      "additionalProperties": false
     },
     "description": "Incident bands across all lanes."
    },
    "utc": {
     "type": "boolean",
     "description": "Time labels in UTC (with \"UTC\" in the export header) or local time. Default: `true`.",
     "default": true
    },
    "errorRate": {
     "type": "object",
     "properties": {
      "warn": {
       "type": "number"
      },
      "critical": {
       "type": "number"
      }
     },
     "additionalProperties": false,
     "description": "Error-rate classes of the events columns in %: below `warn`, `warn`–`critical`, above. Default: `{ warn: 1, critical: 5 }`.",
     "x-wcc-default": "{ warn: 1, critical: 5 }"
    },
    "lens": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean"
      },
      "factor": {
       "type": "number"
      },
      "from": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ]
      },
      "to": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ]
      },
      "pad": {
       "type": "number"
      }
     },
     "additionalProperties": false,
     "description": "Focus lens: magnifies the time axis between `from` and `to` (default: the first incident ± max(3 slots, 30 min))\nby `factor` relative to the rest of the axis (1.5–12, default 4). Values are never changed. Shown as a header chip\n(a button: click or L toggles it), on the axis and in describe(). Default: on for quintConvergence, off for quintTimeline."
    },
    "focus": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean"
      }
     },
     "additionalProperties": false,
     "description": "Incident callouts: one value per lane at the incident, wired to its start. Default: on for quintConvergence."
    },
    "crosshair": {
     "type": "boolean",
     "description": "Shared crosshair over all lanes. Default: `true`.",
     "default": true
    },
    "legend": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean"
      }
     },
     "additionalProperties": false,
     "description": "Legend below the lanes. Default: `{ show: true }`.",
     "x-wcc-default": "{ show: true }"
    }
   },
   "additionalProperties": false
  },
  "WccSankeyOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "orientation": {
     "type": "string",
     "enum": [
      "horizontal",
      "vertical"
     ],
     "description": "`'horizontal'` lets the flow run left to right; `'vertical'` runs it top to bottom. Default:\n`'horizontal'`.",
     "default": "horizontal"
    },
    "nodeWidth": {
     "type": "number",
     "description": "Node bar thickness in px. Default: `12`.",
     "default": 12
    },
    "nodePadding": {
     "type": "number",
     "description": "Gap between nodes of a column in px. Default: `16`.",
     "default": 16
    },
    "nodeAlign": {
     "type": "string",
     "enum": [
      "right",
      "left",
      "center",
      "justify"
     ],
     "description": "Column of nodes without outgoing links: `'justify'` moves them to the last column, `'left'`\nkeeps them at their depth, `'right'` aligns everything to the end, `'center'` puts sources next\nto their first target. Default: `'justify'`.",
     "default": "justify"
    },
    "nodeBorderRadius": {
     "type": "number",
     "description": "Corner radius of the node bars in px. Default: `3`.",
     "default": 3
    },
    "minNodeHeight": {
     "type": "number",
     "description": "Smallest node length in px, so tiny values stay visible. Default: `2`.",
     "default": 2
    },
    "iterations": {
     "type": "number",
     "description": "Relaxation passes that reduce link crossings (ignored with `sort: 'input'`). Default: `32`.",
     "default": 32
    },
    "sort": {
     "type": "string",
     "enum": [
      "auto",
      "input"
     ],
     "description": "`'input'` keeps the node order of the data; `'auto'` reorders nodes to reduce crossings.\nDefault: `'auto'`.",
     "default": "auto"
    },
    "cycles": {
     "type": "string",
     "enum": [
      "error",
      "break",
      "circular"
     ],
     "description": "Data with a cycle: `'error'` shows an error and emits an `error` event, `'break'` drops the\nclosing links (with a console warning), `'circular'` draws them as return loops. Default:\n`'error'`.",
     "default": "error"
    },
    "nodes": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "id": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ],
        "description": "Node id used in the links."
       },
       "name": {
        "type": "string",
        "description": "Shown name; not set uses the id."
       },
       "color": {
        "type": "string",
        "description": "Node colour."
       },
       "column": {
        "type": "number",
        "description": "Fixed column (0 is the first)."
       }
      },
      "required": [
       "id"
      ],
      "additionalProperties": false
     },
     "description": "Node definitions that set names, colours or fixed columns. Default: `[]`.",
     "default": []
    },
    "draggable": {
     "type": "boolean",
     "description": "Lets the user drag nodes across the flow; positions survive updates. Default: `false`.",
     "default": false
    },
    "rtl": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "boolean"
      }
     ],
     "description": "Mirrored layout, the flow runs right to left; `'auto'` follows the CSS direction. Default:\n`'auto'`.",
     "default": "auto"
    },
    "link": {
     "type": "object",
     "properties": {
      "colorMode": {
       "type": "string",
       "enum": [
        "source",
        "target",
        "gradient"
       ],
       "description": "Ribbon colour from the `'source'` node, the `'target'` node, or a `'gradient'` between both.\nDefault: `'gradient'`.",
       "default": "gradient"
      },
      "color": {
       "type": "string",
       "description": "One colour for all ribbons (a link's own `color` still wins)."
      },
      "opacity": {
       "type": "number",
       "description": "Ribbon opacity; not set uses 0.34 (0.5 in dark mode)."
      },
      "curvature": {
       "type": "number",
       "description": "Bend of the ribbons, 0 straight. Default: `0.5`.",
       "default": 0.5
      },
      "minWidth": {
       "type": "number",
       "description": "Thinnest ribbon in px. Default: `1`.",
       "default": 1
      },
      "circularWidth": {
       "type": "number",
       "description": "Width factor (0.1 to 1) of return loops with `cycles: 'circular'`. Default: `0.4`.",
       "default": 0.4
      },
      "particles": {
       "type": "object",
       "properties": {
        "enabled": {
         "type": "boolean",
         "description": "Turns the particles on (not with motion off). Default: `false`.",
         "default": false
        },
        "density": {
         "type": "number",
         "description": "Factor on the number of particles. Default: `1`.",
         "default": 1
        },
        "speed": {
         "type": "number",
         "description": "Factor on the particle speed. Default: `1`.",
         "default": 1
        },
        "size": {
         "type": "number",
         "description": "Particle radius in px. Default: `2.2`.",
         "default": 2.2
        },
        "color": {
         "type": "string",
         "description": "Particle colour; not set uses the target node colour (white in dark mode)."
        }
       },
       "additionalProperties": false,
       "description": "Animated dots flowing along the links."
      }
     },
     "additionalProperties": false,
     "description": "Link ribbons."
    },
    "alluvial": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Turns alluvial mode on (input node order, a gradient link colour becomes source). Default: `false`.",
       "default": false
      },
      "stages": {
       "type": "array",
       "items": {
        "type": "string"
       },
       "description": "Stage labels; not set numbers the stages from 1. Default: `[]`.",
       "default": []
      },
      "showStageLabels": {
       "type": "boolean",
       "description": "Shows the stage labels over the columns. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Alluvial mode: data points `{ from, to, value, stage }` link the same categories across stages."
    },
    "playback": {
     "type": "object",
     "properties": {
      "frames": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "label": {
          "type": "string",
          "description": "Frame label (series name, playback button and `playbackFrame` event)."
         },
         "data": {
          "type": "array",
          "items": {},
          "description": "Link data of the frame."
         }
        },
        "required": [
         "data"
        ],
        "additionalProperties": false
       },
       "description": "Frames `{ label, data }`; two or more start the playback. Default: `[]`.",
       "default": []
      },
      "interval": {
       "type": "number",
       "description": "Time per frame in ms (at least 300). Default: `2400`.",
       "default": 2400
      },
      "autoplay": {
       "type": "boolean",
       "description": "Starts playing on render. Default: `true`.",
       "default": true
      },
      "loop": {
       "type": "boolean",
       "description": "Starts again after the last frame. Default: `true`.",
       "default": true
      },
      "controls": {
       "type": "boolean",
       "description": "Shows play and frame buttons. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Animated playback of several data frames."
    },
    "labels": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Shows the node labels. Default: `true`.",
       "default": true
      },
      "position": {
       "type": "string",
       "enum": [
        "auto",
        "outside"
       ],
       "description": "`'outside'` puts first-column labels on the outer side too; `'auto'` places them next to the node, inside the flow. Default: `'auto'`.",
       "default": "auto"
      },
      "showValue": {
       "type": "boolean",
       "description": "Shows the node value under the name. Default: `true`.",
       "default": true
      },
      "fontSize": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Label font size; not set uses the theme font size."
      },
      "fontWeight": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ],
       "description": "Label font weight. Default: `600`.",
       "default": 600
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(name, { node, value, w }) => string` for the label name."
      },
      "valueFormatter": {
       "x-wcc-type": "function",
       "description": "`(value, { node, w }) => string` for values in labels and tooltips; not set uses `tooltip.y.formatter` or a number format."
      }
     },
     "additionalProperties": false,
     "description": "Node labels."
    },
    "drilldown": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "`false` switches drill-down off. Default: `true`.",
       "default": true
      },
      "breadcrumb": {
       "type": "boolean",
       "description": "Shows the breadcrumb of the opened levels. Default: `true`.",
       "default": true
      },
      "rootLabel": {
       "type": "string",
       "description": "Breadcrumb label of the top level; not set uses `'Overview'` (sankey) or the map name."
      },
      "load": {
       "x-wcc-type": "function",
       "description": "load(item, info) returns a level or a Promise of one"
      },
      "drillable": {
       "anyOf": [
        {
         "type": "array",
         "items": {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ]
         }
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "ids that can be opened, or a test; default: every item when only load is set"
      },
      "nodes": {
       "type": "object",
       "additionalProperties": true,
       "description": "Levels per node id: link data, `{ data, label, nodes }`, or `true` to load the level via `load`."
      }
     },
     "additionalProperties": false,
     "description": "Drill-down into nodes."
    }
   },
   "additionalProperties": false
  },
  "WccScheduleOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "date": {
     "type": "string",
     "description": "The day shown (YYYY-MM-DD in timeZone; a week starts on its Monday)."
    },
    "range": {
     "type": "string",
     "enum": [
      "day",
      "week"
     ],
     "description": "Default: `'day'`.",
     "default": "day"
    },
    "timeZone": {
     "type": "string",
     "description": "IANA zone of the wall-clock times."
    },
    "now": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "The current time (now line)."
    },
    "resources": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "id": {
        "type": "string"
       },
       "name": {
        "type": "string"
       },
       "kind": {
        "type": "string",
        "enum": [
         "device",
         "room",
         "staff"
        ]
       }
      },
      "required": [
       "id"
      ],
      "additionalProperties": false
     }
    },
    "people": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "id": {
        "type": "string"
       },
       "name": {
        "type": "string"
       },
       "role": {
        "type": "string"
       },
       "color": {
        "type": "string"
       },
       "dash": {
        "type": "string"
       }
      },
      "required": [
       "id"
      ],
      "additionalProperties": false
     },
     "description": "Doctors and staff: colour + dash identify a person's route."
    },
    "items": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "id": {
        "type": "string"
       },
       "resource": {
        "type": "string"
       },
       "start": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "end": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "people": {
        "type": "array",
        "items": {
         "type": "string"
        }
       },
       "patient": {
        "type": "string"
       },
       "label": {
        "type": "string"
       },
       "status": {
        "type": "string",
        "enum": [
         "confirmed",
         "tentative",
         "arrived",
         "done",
         "cancelled",
         "no-show"
        ]
       }
      },
      "required": [
       "id",
       "resource",
       "start",
       "end"
      ],
      "additionalProperties": false
     },
     "description": "Appointments; start / end as ms, ISO or 'HH:MM' on `date`. `patient` is a pseudonymous id, hidden unless redact: false."
    },
    "hours": {
     "type": "object",
     "properties": {
      "open": {
       "type": "string"
      },
      "close": {
       "type": "string"
      },
      "days": {
       "type": "array",
       "items": {
        "type": "number"
       }
      },
      "breaks": {
       "type": "array",
       "items": {
        "type": "array",
        "prefixItems": [
         {
          "type": "string"
         },
         {
          "type": "string"
         }
        ],
        "minItems": 2,
        "maxItems": 2
       }
      }
     },
     "additionalProperties": false,
     "description": "Opening hours: closed time and breaks are hatched; appointments outside are a warning."
    },
    "rules": {
     "type": "object",
     "properties": {
      "minTransfer": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ]
      }
     },
     "additionalProperties": false,
     "description": "A changeover between two rooms below minTransfer is a warning. Default: `'5min'`.",
     "default": "5min"
    },
    "view": {
     "type": "string",
     "enum": [
      "auto",
      "lanes",
      "board"
     ],
     "description": "'lanes' (horizontal), 'board' (vertical), 'auto' = board below 560 px. Default: `'auto'`.",
     "default": "auto"
    },
    "lanes": {
     "type": "string",
     "enum": [
      "resources",
      "people"
     ],
     "description": "Lanes per resource or per person. Default: `'resources'`.",
     "default": "resources"
    },
    "routes": {
     "type": "boolean",
     "description": "Draw a route per person. Default: `true`.",
     "default": true
    },
    "snap": {
     "type": "number",
     "description": "Snap of drag / keyboard moves in minutes. Default: `15`.",
     "default": 15
    },
    "editable": {
     "type": "boolean",
     "description": "Drag / resize / keyboard moves emit 'scheduleChange' proposals (data is never changed). Default: `true`.",
     "default": true
    },
    "redact": {
     "type": "boolean",
     "description": "Keep patient ids out of describe(), tooltips and the table. Default: `true`.",
     "default": true
    },
    "filter": {
     "type": "object",
     "properties": {
      "people": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        }
       ]
      }
     },
     "additionalProperties": false,
     "description": "Only appointments of these people."
    },
    "legend": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean"
      }
     },
     "additionalProperties": false
    },
    "conflicts": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean"
      },
      "list": {
       "type": "number"
      }
     },
     "additionalProperties": false,
     "description": "Conflict summary in the header and the number of listed conflicts. Default: `{ show: true, list: 3 }`.",
     "x-wcc-default": "{ show: true, list: 3 }"
    }
   },
   "additionalProperties": false
  },
  "WccSeries": {
   "type": "object",
   "properties": {
    "name": {
     "type": "string",
     "description": "Series name shown in the legend and tooltip."
    },
    "type": {
     "type": "string",
     "description": "Per-series chart type in combo charts; for the map, the layer kind (choropleth, bubble, hexbin,\narcs, markers, pins, routes)."
    },
    "color": {
     "type": "string",
     "description": "Colour of the series; overrides the palette colour at its index."
    },
    "group": {
     "type": "string",
     "description": "Stack group: stacked bars with the same group share one stack."
    },
    "hidden": {
     "type": "boolean",
     "description": "Starts the series hidden, as if toggled off in the legend. Default: `false`.",
     "default": false
    },
    "data": {
     "anyOf": [
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "null"
         },
         {
          "type": "number"
         }
        ]
       }
      },
      {
       "$ref": "#/$defs/WccDatum"
      },
      {
       "type": "array",
       "items": {
        "$ref": "#/$defs/WccDatum"
       }
      },
      {
       "type": "array",
       "items": {
        "type": "array",
        "prefixItems": [
         {},
         {},
         {
          "anyOf": [
           {
            "type": "null"
           },
           {
            "type": "number"
           }
          ]
         }
        ],
        "minItems": 2,
        "maxItems": 3
       }
      },
      {
       "type": "array",
       "items": {
        "type": "array",
        "items": {}
       }
      },
      {
       "type": "object",
       "properties": {
        "nodes": {
         "type": "array",
         "items": {
          "$ref": "#/$defs/WccDatum"
         },
         "description": "Graph nodes (network, sankey, tree) when the graph is passed as `data`."
        },
        "edges": {
         "type": "array",
         "items": {
          "$ref": "#/$defs/WccDatum"
         },
         "description": "Network edges when the graph is passed as `data`."
        },
        "links": {
         "type": "array",
         "items": {
          "$ref": "#/$defs/WccDatum"
         },
         "description": "Sankey links when the graph is passed as `data`."
        }
       },
       "additionalProperties": false
      }
     ],
     "description": "Data of the series: numbers, `[x, y]` pairs, point objects, or a `{ nodes, edges, links }`\ngraph, depending on the type."
    },
    "nodes": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/WccDatum"
     },
     "description": "network"
    },
    "edges": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "$ref": "#/$defs/WccDatum"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ]
         },
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ]
         },
         {
          "type": "number"
         }
        ],
        "minItems": 2,
        "maxItems": 3
       }
      ]
     },
     "description": "Network edges: `{ from, to }` objects or `[from, to, weight?]` tuples."
    },
    "links": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "$ref": "#/$defs/WccDatum"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ]
         },
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ]
         },
         {
          "type": "number"
         }
        ],
        "minItems": 2,
        "maxItems": 3
       }
      ]
     },
     "description": "Sankey or network links: `{ from, to, value }` objects or `[from, to, value?]` tuples."
    },
    "paths": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "name": {
        "type": "string"
       },
       "nodes": {
        "type": "array",
        "items": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ]
        }
       },
       "severity": {},
       "color": {
        "type": "string"
       }
      },
      "required": [
       "nodes"
      ],
      "additionalProperties": false
     },
     "description": "Network: highlighted paths, each a node id sequence with a name, severity and colour."
    },
    "highlightData": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "highlight-filter feature: the filtered part of every point"
    },
    "marker": {
     "type": "string",
     "description": "map marker series"
    },
    "size": {
     "type": "number",
     "description": "Map marker series: marker size in pixels."
    },
    "labels": {
     "type": "boolean",
     "description": "Map marker series: draws a label next to each marker."
    },
    "lane": {
     "type": "string",
     "description": "quintTimeline / quintConvergence: id of the lane (plotOptions.quint.lanes[].id) this series is drawn in."
    },
    "keys": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "array",
       "items": {
        "type": "string"
       }
      }
     ],
     "description": "quintTimeline / quintConvergence: semantic keys (service, cluster, region) for crossfilter across lanes. Default: `[name]`.",
     "x-wcc-default": "[name]"
    },
    "errorRate": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "quintTimeline / quintConvergence, events lane: error rate per slot in percent (0–100); colours the columns."
    },
    "typical": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "null"
       },
       {
        "type": "number"
       }
      ]
     },
     "description": "quintTimeline / quintConvergence, events lane: the typical day per slot, drawn as a dashed step line."
    },
    "availability": {
     "type": "number",
     "description": "quintTimeline / quintConvergence, budget lane: availability target in percent, shown as \"availability · p95 latency\"."
    },
    "p95": {
     "type": "number",
     "description": "quintTimeline / quintConvergence, budget lane: p95 latency in ms, shown as \"availability · p95 latency\"."
    }
   },
   "additionalProperties": true
  },
  "WccStockDrawing": {
   "type": "object",
   "properties": {
    "id": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Id of the drawing; not set gets `'d1'`, `'d2'`, ..."
    },
    "type": {
     "type": "string",
     "description": "`'trendline'` (2 points), `'ray'` (horizontal, 1 point), `'fib'` (retracement, 2 points) or\n`'rect'` (2 corners); aliases such as `'line'` or `'box'` are accepted."
    },
    "points": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "object",
        "properties": {
         "t": {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           },
           {
            "x-wcc-type": "Date"
           }
          ],
          "description": "Time of the anchor."
         },
         "y": {
          "type": "number",
          "description": "Price of the anchor."
         }
        },
        "required": [
         "t",
         "y"
        ],
        "additionalProperties": false
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           },
           {
            "x-wcc-type": "Date"
           }
          ]
         },
         {
          "type": "number"
         }
        ],
        "minItems": 2,
        "maxItems": 2
       }
      ]
     },
     "description": "Anchors as `{ t, y }` or `[t, y]` (time, price); invalid drawings are skipped."
    },
    "color": {
     "type": "string",
     "description": "Colour; not set uses `drawings.colors` or the palette."
    },
    "label": {
     "type": "string",
     "description": "Text written along the drawing."
    },
    "width": {
     "type": "number",
     "description": "Line width in px. Default: `1.6`.",
     "default": 1.6
    },
    "extend": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "right",
        "left",
        "both"
       ]
      },
      {
       "type": "boolean"
      }
     ],
     "description": "Trend line: extends to the plot edge (`true` or `'both'` both ways, `'left'`, `'right'`); fib:\n`false` ends the levels at the second point."
    },
    "dash": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "string"
      }
     ],
     "description": "`true` dashes the line; a string is used as SVG dash array; not set draws it solid."
    },
    "fill": {
     "type": "string",
     "description": "Fill of a rectangle; not set uses a faint tint of the colour."
    },
    "levels": {
     "type": "array",
     "items": {
      "type": "number"
     },
     "description": "Fibonacci levels as fractions. Default: `[0, 0.236, 0.382, 0.5, 0.618, 0.786, 1]`.",
     "default": [
      0,
      0.236,
      0.382,
      0.5,
      0.618,
      0.786,
      1
     ]
    },
    "locked": {
     "type": "boolean",
     "description": "`true` stops the user from moving or editing the drawing."
    },
    "labelPosition": {
     "type": "string",
     "enum": [
      "below",
      "above"
     ],
     "description": "Side of the trend line label. Default: `'above'`.",
     "default": "above"
    }
   },
   "required": [
    "type",
    "points"
   ],
   "additionalProperties": false
  },
  "WccStockOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "enabled": {
     "type": "boolean",
     "description": "with chart.type 'candlestick': draw it with the stock renderer"
    },
    "style": {
     "type": "string",
     "enum": [
      "line",
      "area",
      "candlestick",
      "ohlc"
     ],
     "description": "Price display: candles, OHLC bars, a close line or a close area. Default: `'candlestick'`.",
     "default": "candlestick"
    },
    "colors": {
     "type": "object",
     "properties": {
      "up": {
       "type": "string",
       "description": "Rising candle colour; not set uses the theme's positive colour."
      },
      "down": {
       "type": "string",
       "description": "Falling candle colour; not set uses the theme's negative colour."
      }
     },
     "additionalProperties": false,
     "description": "Colours of rising and falling candles."
    },
    "volume": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the volume bars. Default: `true`.",
       "default": true
      },
      "height": {
       "type": "number",
       "description": "Share of the price pane used by volume (0.05 to 0.5). Default: `0.2`.",
       "default": 0.2
      }
     },
     "additionalProperties": false,
     "description": "Volume bars at the bottom of the price pane (drawn when the data has volume)."
    },
    "overlays": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "type": {
        "type": "string",
        "enum": [
         "sma",
         "ema",
         "bollinger"
        ],
        "description": "Overlay kind (`'bb'` is accepted for Bollinger)."
       },
       "period": {
        "type": "number",
        "description": "Period in candles. Default: `20`.",
        "default": 20
       },
       "k": {
        "type": "number",
        "description": "Bollinger band width in standard deviations. Default: `2`.",
        "default": 2
       },
       "color": {
        "type": "string",
        "description": "Line colour; not set cycles through theme colours."
       }
      },
      "required": [
       "type"
      ],
      "additionalProperties": false
     },
     "description": "Price overlays: SMA, EMA or Bollinger bands. Default: `[]`.",
     "default": []
    },
    "indicators": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "object",
        "properties": {
         "type": {
          "const": "rsi",
          "description": "Indicator kind."
         },
         "period": {
          "type": "number",
          "description": "RSI period in candles. Default: `14`.",
          "default": 14
         }
        },
        "required": [
         "type"
        ],
        "additionalProperties": false
       },
       {
        "type": "object",
        "properties": {
         "type": {
          "const": "macd",
          "description": "Indicator kind."
         },
         "fast": {
          "type": "number",
          "description": "MACD fast EMA period. Default: `12`.",
          "default": 12
         },
         "slow": {
          "type": "number",
          "description": "MACD slow EMA period. Default: `26`.",
          "default": 26
         },
         "signal": {
          "type": "number",
          "description": "MACD signal EMA period. Default: `9`.",
          "default": 9
         }
        },
        "required": [
         "type"
        ],
        "additionalProperties": false
       }
      ]
     },
     "description": "Indicator panes under the price pane: RSI or MACD. Default: `[]`.",
     "default": []
    },
    "rangeSelector": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the range buttons. Default: `true`.",
       "default": true
      },
      "buttons": {
       "type": "array",
       "items": {
        "type": "object",
        "properties": {
         "label": {
          "type": "string",
          "description": "Button text; also the value of `selected`."
         },
         "months": {
          "type": "number",
          "description": "Months back from the last candle."
         },
         "days": {
          "type": "number",
          "description": "Days back from the last candle."
         },
         "ytd": {
          "type": "boolean",
          "description": "Spans from 1 January of the last candle's year."
         },
         "all": {
          "type": "boolean",
          "description": "Spans all candles."
         }
        },
        "required": [
         "label"
        ],
        "additionalProperties": false
       },
       "description": "Buttons, each spanning `months`, `days`, the year to date (`ytd`) or `all`. Default: 1M, 3M, 6M, YTD, 1Y, All."
      },
      "selected": {
       "type": "string",
       "description": "Label of the initial range; not set picks 6M (over 400 days of data), 3M (over 120 days) or All."
      }
     },
     "additionalProperties": false,
     "description": "Range buttons above the chart."
    },
    "navigator": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the navigator. Default: `true`.",
       "default": true
      },
      "height": {
       "type": "number",
       "description": "Navigator height in px. Default: `46`.",
       "default": 46
      }
     },
     "additionalProperties": false,
     "description": "Overview strip with a draggable window under the chart."
    },
    "crosshair": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the crosshair lines. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Crosshair across all panes."
    },
    "readout": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the readout and its reserved space. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "OHLC and overlay values written at the top of the price pane."
    },
    "realtime": {
     "type": "object",
     "properties": {
      "follow": {
       "type": "boolean",
       "description": "Keeps the view at the newest candle when new ones arrive while the view is at the end. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "Behaviour when candles are added."
    },
    "zoom": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "`false` disables wheel zoom and drag panning. Default: `true`.",
       "default": true
      },
      "wheel": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "string"
        }
       ],
       "description": "`'ctrl'` zooms while Ctrl or Cmd is held, `true` on every wheel event; other values never. Default: `'ctrl'`.",
       "default": "ctrl"
      },
      "minCandles": {
       "type": "number",
       "description": "Fewest candles in view (at least 2). Default: `8`.",
       "default": 8
      }
     },
     "additionalProperties": false,
     "description": "Zoom and pan of the time axis."
    },
    "yaxis": {
     "type": "object",
     "properties": {
      "decimals": {
       "type": "number",
       "description": "Decimals of prices; not set uses 0 from 1000, 2 from 1, otherwise 4."
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "`(price, { w }) => string` for axis labels and readouts."
      },
      "type": {
       "type": "string",
       "enum": [
        "linear",
        "log",
        "percent"
       ],
       "description": "`'log'` uses a logarithmic scale, `'percent'` shows the change against the first visible close. Default: `'linear'`.",
       "default": "linear"
      }
     },
     "additionalProperties": false,
     "description": "Price axis."
    },
    "timeframe": {
     "type": "string",
     "enum": [
      "day",
      "week",
      "month"
     ],
     "description": "Candle size; `'week'` and `'month'` aggregate the input candles. Default: `'day'`.",
     "default": "day"
    },
    "priceLines": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "y": {
        "type": "number",
        "description": "Price of the line."
       },
       "label": {
        "type": "string",
        "description": "Text chip at the left end of the line."
       },
       "color": {
        "type": "string",
        "description": "Line colour; not set cycles through theme colours."
       },
       "dash": {
        "type": "boolean",
        "description": "`false` draws the line solid; otherwise it is dashed."
       },
       "width": {
        "type": "number",
        "description": "Line width in px. Default: `1.2`.",
        "default": 1.2
       }
      },
      "required": [
       "y"
      ],
      "additionalProperties": false
     },
     "description": "Horizontal price levels (orders, targets, stops) with an axis label. Default: `[]`.",
     "default": []
    },
    "markers": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "x": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         },
         {
          "x-wcc-type": "Date"
         }
        ],
        "description": "Date of the event."
       },
       "label": {
        "type": "string",
        "description": "One or two characters inside the flag. Default: `'•'`.",
        "default": "•"
       },
       "text": {
        "type": "string",
        "description": "Hover text of the flag (after the date)."
       },
       "color": {
        "type": "string",
        "description": "Flag colour; not set cycles through theme colours."
       },
       "position": {
        "type": "string",
        "enum": [
         "below",
         "above"
        ],
        "description": "`'below'` the candle's low or `'above'` its high. Default: `'below'`.",
        "default": "below"
       }
      },
      "required": [
       "x"
      ],
      "additionalProperties": false
     },
     "description": "Event flags (earnings, dividends, splits) on the candle of their date. Default: `[]`.",
     "default": []
    },
    "drawings": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Turns the drawing tools on. Default: `false`.",
       "default": false
      },
      "tools": {
       "type": "array",
       "items": {
        "type": "string",
        "enum": [
         "rect",
         "trendline",
         "ray",
         "fib"
        ]
       },
       "description": "Tools in the toolbar. Default: `['trendline', 'ray', 'fib', 'rect']`.",
       "x-wcc-default": "['trendline', 'ray', 'fib', 'rect']"
      },
      "items": {
       "type": "array",
       "items": {
        "$ref": "#/$defs/WccStockDrawing"
       },
       "description": "Initial drawings. Default: `[]`.",
       "default": []
      },
      "toolbar": {
       "type": "boolean",
       "description": "`false` hides the tool buttons (drawings stay visible). Default: `true`.",
       "default": true
      },
      "magnet": {
       "type": "boolean",
       "description": "Snaps anchors to the open, high, low or close within 10 px of the pointer. Default: `true`.",
       "default": true
      },
      "keepTool": {
       "type": "boolean",
       "description": "Keeps the tool active after a drawing is finished. Default: `false`.",
       "default": false
      },
      "storageKey": {
       "type": "string",
       "description": "localStorage key; set saves and restores the drawings."
      },
      "palette": {
       "type": "string",
       "enum": [
        "muted",
        "vivid"
       ],
       "description": "`'muted'` uses the accent for trend lines and a muted tone for the rest; `'vivid'` gives\nevery tool its own colour. Default: `'muted'`.",
       "default": "muted"
      },
      "colors": {
       "type": "object",
       "properties": {
        "trendline": {
         "type": "string",
         "description": "Trend line colour."
        },
        "ray": {
         "type": "string",
         "description": "Horizontal ray colour."
        },
        "fib": {
         "type": "string",
         "description": "Fibonacci retracement colour."
        },
        "rect": {
         "type": "string",
         "description": "Rectangle colour."
        }
       },
       "additionalProperties": false,
       "description": "Colour per tool; wins over the palette."
      }
     },
     "additionalProperties": false,
     "description": "Drawing tools for the user (opt-in)."
    }
   },
   "additionalProperties": false
  },
  "WccTextStyle": {
   "type": "object",
   "properties": {
    "fontSize": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Font size."
    },
    "fontFamily": {
     "type": "string",
     "description": "Font family; not set uses the chart font."
    },
    "fontWeight": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Font weight."
    },
    "colors": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Text colours; an array gives one per series or item."
    }
   },
   "additionalProperties": false
  },
  "WccThemeTokens": {
   "type": "object",
   "properties": {
    "fontFamily": {
     "type": "string",
     "description": "Chart font family (CSS `--wcc-font-family`)."
    },
    "fontSize": {
     "type": "string",
     "description": "Base font size of labels, legend and tooltip (CSS `--wcc-font-size`); axis labels use one pixel\nless, at least 10px."
    },
    "text": {
     "type": "string",
     "description": "Primary text colour: titles and centre values (CSS `--wcc-text`)."
    },
    "textMuted": {
     "type": "string",
     "description": "Secondary text colour: axis labels, legend, subtitle (CSS `--wcc-text-muted`)."
    },
    "surface": {
     "type": "string",
     "description": "Colour of surfaces drawn on top of the plot, such as marker outlines and slice separators (CSS\n`--wcc-surface`)."
    },
    "background": {
     "type": "string",
     "description": "Chart background colour (CSS `--wcc-background`)."
    },
    "grid": {
     "type": "string",
     "description": "Grid line colour; also radar polygons (CSS `--wcc-grid`)."
    },
    "axis": {
     "type": "string",
     "description": "Axis border, tick and crosshair colour (CSS `--wcc-axis`)."
    },
    "track": {
     "type": "string",
     "description": "Background track of radial bars and gauges (CSS `--wcc-track`)."
    },
    "accent": {
     "type": "string",
     "description": "Accent colour of hovered and selected menu items (CSS `--wcc-accent`)."
    },
    "focusRing": {
     "type": "string",
     "description": "Colour of the keyboard focus indicator (CSS `--wcc-focus-ring`)."
    },
    "tooltipBg": {
     "type": "string",
     "description": "Tooltip background (CSS `--wcc-tooltip-bg`)."
    },
    "tooltipText": {
     "type": "string",
     "description": "Tooltip text colour (CSS `--wcc-tooltip-text`)."
    },
    "tooltipBorder": {
     "type": "string",
     "description": "Tooltip border colour (CSS `--wcc-tooltip-border`)."
    },
    "tooltipShadow": {
     "type": "string",
     "description": "Tooltip box-shadow, any CSS shadow value (CSS `--wcc-tooltip-shadow`)."
    },
    "radius": {
     "type": "string",
     "description": "Corner radius of the tooltip (CSS `--wcc-radius`)."
    },
    "radiusSm": {
     "type": "string",
     "description": "Smaller corner radius of axis tooltips and legend items (CSS `--wcc-radius-sm`)."
    },
    "barRadius": {
     "type": "string",
     "description": "Bar corner radius in pixels, applied to the outer end (CSS `--wcc-bar-radius`)."
    },
    "lineWidth": {
     "type": "string",
     "description": "Stroke width of line-type series in pixels (CSS `--wcc-line-width`)."
    },
    "gridDash": {
     "type": "string",
     "description": "Dash length of grid lines; '0' is solid (CSS `--wcc-grid-dash`)."
    },
    "motionDuration": {
     "type": "string",
     "description": "Animation duration in milliseconds (CSS `--wcc-motion-duration`). Preset default: '650'."
    },
    "motionEasing": {
     "type": "string",
     "description": "Animation easing name (CSS `--wcc-motion-easing`). Preset default: 'easeOutCubic'."
    },
    "palette": {
     "type": "array",
     "items": {
      "type": "string"
     },
     "description": "Series colours (CSS `--wcc-palette` as a comma-separated list)."
    }
   },
   "additionalProperties": false
  },
  "WccTreeOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "layout": {
     "type": "string",
     "enum": [
      "tidy",
      "dendrogram"
     ],
     "description": "`'tidy'` places parents over their children; `'dendrogram'` puts all leaves on the last level.\nDefault: `'tidy'`.",
     "default": "tidy"
    },
    "orientation": {
     "type": "string",
     "enum": [
      "horizontal",
      "vertical",
      "radial",
      "top-to-bottom",
      "bottom-to-top",
      "left-to-right",
      "right-to-left"
     ],
     "description": "Growth direction; `'radial'` places levels on rings. The aliases `'top-to-bottom'`,\n`'bottom-to-top'`, `'left-to-right'` and `'right-to-left'` also set `direction`. Default:\n`'vertical'`.",
     "default": "vertical"
    },
    "direction": {
     "type": "string",
     "enum": [
      "reverse",
      "forward"
     ],
     "description": "`'reverse'` puts the root at the bottom (vertical) or right (horizontal). Default: `'forward'`.",
     "default": "forward"
    },
    "rtl": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "boolean"
      }
     ],
     "description": "Mirrored layout (first child on the right, horizontal trees grow leftwards, card text\nright-aligned); `'auto'` follows the CSS direction. Default: `'auto'`.",
     "default": "auto"
    },
    "node": {
     "type": "object",
     "properties": {
      "template": {
       "type": "string",
       "enum": [
        "auto",
        "card",
        "compact",
        "dot"
       ],
       "description": "`'card'`, `'compact'` or `'dot'`; `'auto'` uses dots for radial trees and dendrograms,\notherwise cards. Default: `'auto'`.",
       "default": "auto"
      },
      "width": {
       "type": "number",
       "description": "Card width in px. Default: `196`.",
       "default": 196
      },
      "height": {
       "type": "number",
       "description": "Card height in px. Default: `60`.",
       "default": 60
      },
      "radius": {
       "type": "number",
       "description": "Card corner radius in px. Default: `10`.",
       "default": 10
      },
      "avatar": {
       "type": "boolean",
       "description": "Shows the avatar circle on cards at least 44 px high. Default: `true`.",
       "default": true
      },
      "dotSize": {
       "type": "number",
       "description": "Dot radius of the dot template in px. Default: `5`.",
       "default": 5
      },
      "stackLeaves": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "boolean"
        }
       ],
       "description": "Stacks the leaf children of a vertical card tree in a column; `'auto'` keeps a plain row when\nthat fits the plot better, `false` never stacks. Default: `'auto'`.",
       "default": "auto"
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "returns text fields only, never HTML"
      },
      "size": {
       "x-wcc-type": "function",
       "description": "`(data, { node, depth, children }) => { width, height }` sets a node's own card size (a\n`size` in the data also works)."
      },
      "autoHeight": {
       "type": "boolean",
       "description": "Wraps long titles and subtitles (up to `maxLines`) and grows the card to fit. Default:\n`false`.",
       "default": false
      },
      "maxLines": {
       "type": "number",
       "description": "Most lines of a wrapped text with `autoHeight`. Default: `3`.",
       "default": 3
      }
     },
     "additionalProperties": false,
     "description": "Node drawing."
    },
    "wrappers": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "id": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ],
        "description": "Id of the framed node."
       },
       "label": {
        "type": "string",
        "description": "Label of the frame."
       },
       "color": {
        "type": "string",
        "description": "Frame colour."
       },
       "dashed": {
        "type": "boolean",
        "description": "Dashes the frame outline. Default: `false`.",
        "default": false
       }
      },
      "required": [
       "id"
      ],
      "additionalProperties": false
     },
     "description": "Frames around a node and its visible descendants (cards only, not radial); a node's data\n`wrapper: true | { label, color }` also adds one. Default: `[]`.",
     "default": []
    },
    "spacing": {
     "type": "object",
     "properties": {
      "sibling": {
       "type": "number",
       "description": "Gap between neighbouring cards. Default: `16`.",
       "default": 16
      },
      "level": {
       "type": "number",
       "description": "Gap between levels. Default: `56`.",
       "default": 56
      },
      "dot": {
       "type": "number",
       "description": "Distance between neighbouring dots. Default: `22`.",
       "default": 22
      }
     },
     "additionalProperties": false,
     "description": "Gaps of the layout in px."
    },
    "radial": {
     "type": "object",
     "properties": {
      "startAngle": {
       "type": "number",
       "description": "Start angle in degrees clockwise from 12 o'clock; not set is fitted to the plot."
      },
      "stretch": {
       "anyOf": [
        {
         "const": "auto"
        },
        {
         "type": "boolean"
        }
       ],
       "description": "`false` keeps a true circle; `'auto'` stretches it (up to 1.45 x) along the plot's long side. Default: `'auto'`.",
       "default": "auto"
      }
     },
     "additionalProperties": false,
     "description": "Radial layout."
    },
    "links": {
     "type": "object",
     "properties": {
      "style": {
       "type": "string",
       "enum": [
        "auto",
        "elbow",
        "curve",
        "straight"
       ],
       "description": "`'elbow'`, `'curve'` or `'straight'`; `'auto'` uses curves for dot trees (not dendrograms), otherwise elbows. Default: `'auto'`.",
       "default": "auto"
      },
      "color": {
       "type": "string",
       "description": "Link colour; not set uses a muted tone (a branch tint for dot trees)."
      },
      "width": {
       "type": "number",
       "description": "Link width in px. Default: `1.25`.",
       "default": 1.25
      }
     },
     "additionalProperties": false,
     "description": "Parent-child links."
    },
    "colorBy": {
     "type": "string",
     "enum": [
      "none",
      "branch",
      "depth"
     ],
     "description": "Node tint: one colour per top-level `'branch'`, per `'depth'`, or the accent for `'none'`.\nDefault: `'branch'`.",
     "default": "branch"
    },
    "collapse": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Lets the user fold and unfold subtrees. Default: `true`.",
       "default": true
      },
      "initialDepth": {
       "type": "number",
       "description": "Folds nodes at this depth and deeper on the first render; not set opens everything (nodes with `collapsed: true` start folded)."
      }
     },
     "additionalProperties": false,
     "description": "Folding of subtrees."
    },
    "zoom": {
     "type": "object",
     "properties": {
      "enabled": {
       "type": "boolean",
       "description": "Enables zoom and pan of the view. Default: `true`.",
       "default": true
      },
      "wheel": {
       "anyOf": [
        {
         "type": "boolean"
        },
        {
         "type": "string"
        }
       ],
       "description": "Wheel zoom: `'ctrl'` zooms only while Ctrl or Cmd is held, `true` on every wheel event, `false` never. Default: `'ctrl'`.",
       "default": "ctrl"
      },
      "min": {
       "type": "number",
       "description": "Smallest zoom factor. Default: `0.25` for the network, `0.05` for the tree.",
       "default": 0.25
      },
      "max": {
       "type": "number",
       "description": "Largest zoom factor. Default: `8` for the network, `3` for the tree.",
       "default": 8
      },
      "fitMin": {
       "type": "number",
       "description": "Smallest scale of the initial fit; not set uses the scale where the smallest text is `readableFont` px."
      },
      "fitMax": {
       "type": "number",
       "description": "Largest scale of the initial fit. Default: `1.5`.",
       "default": 1.5
      },
      "readableFont": {
       "type": "number",
       "description": "Text size in px the initial view keeps readable. Default: `11`.",
       "default": 11
      },
      "overviewFont": {
       "anyOf": [
        {
         "const": false
        },
        {
         "type": "number"
        }
       ],
       "description": "A tree too big for the readable scale still opens whole while its smallest text stays at least this size; `false` starts readable at the root instead. Default: `8`.",
       "default": 8
      }
     },
     "additionalProperties": false,
     "description": "Zoom and pan (scale 0.05 to 3 by default)."
    },
    "controls": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "`false` hides the zoom buttons. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": false,
     "description": "On-chart zoom buttons."
    },
    "lod": {
     "type": "object",
     "properties": {
      "threshold": {
       "type": "number",
       "description": "Below this zoom scale card texts are hidden and cards drawn as plain shapes. Default: `0.42`.",
       "default": 0.42
      }
     },
     "additionalProperties": false,
     "description": "Level of detail."
    },
    "lazy": {
     "type": "object",
     "properties": {
      "load": {
       "x-wcc-type": "function",
       "description": "`(node, { w, id, name, depth }) => children[] | Promise`, called when such a node is first expanded."
      },
      "loadingText": {
       "type": "string",
       "description": "Text of the placeholder while loading. Default: `'Loading…'`.",
       "default": "Loading…"
      },
      "errorText": {
       "type": "string",
       "description": "Text when the load fails (a click retries). Default: `'Could not load · retry'`.",
       "default": "Could not load · retry"
      }
     },
     "additionalProperties": false,
     "description": "Lazy children for nodes with `hasChildren: true` and no `children`."
    }
   },
   "additionalProperties": false
  },
  "WccTreemapLevel": {
   "type": "object",
   "properties": {
    "header": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws the header. Default: `true`.",
       "default": true
      },
      "showValue": {
       "type": "boolean",
       "description": "Shows the value next to the name. Default: `false`.",
       "default": false
      },
      "align": {
       "type": "string",
       "enum": [
        "right",
        "left",
        "center"
       ],
       "description": "Text position: `'left'`, `'center'` or `'right'`. Default: `'left'`.",
       "default": "left"
      },
      "offsetX": {
       "type": "number",
       "description": "Moves the text horizontally in pixels."
      },
      "offsetY": {
       "type": "number",
       "description": "Moves the text vertically in pixels."
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Header text from the name and `{ value, depth, seriesIndex, node, w }`."
      },
      "style": {
       "type": "object",
       "additionalProperties": true,
       "description": "Text and background style (fontSize, fontWeight, fontFamily, color, background, cssClass)."
      }
     },
     "additionalProperties": true,
     "description": "Header strip of the parent tiles."
    },
    "borderColor": {
     "type": "string",
     "description": "Border colour of the parent tiles."
    },
    "borderWidth": {
     "type": "number",
     "description": "Border width in pixels."
    },
    "borderRadius": {
     "type": "number",
     "description": "Corner radius in pixels."
    },
    "fillOpacity": {
     "type": "number",
     "description": "Fill opacity of the parent tiles."
    }
   },
   "additionalProperties": true
  },
  "WccTrellisOptions": {
   "type": "object",
   "properties": {
    "by": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Splits the series into one panel per value of this field (or function result). Ignored when\n`row` or `column` is set."
    },
    "row": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Field (or function) whose values form the rows of a 2-D grid."
    },
    "panel": {
     "x-wcc-type": "function",
     "description": "Per-panel option overrides: called with the panel key and `{ index, seriesNames }`, returns\noptions merged over the host options (grid-owned paths and a different `chart.type` are ignored)."
    },
    "column": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Field (or function) whose values form the columns of a 2-D grid."
    },
    "emptyPanels": {
     "type": "string",
     "enum": [
      "hide",
      "placeholder",
      "skip"
     ],
     "description": "Empty cells of a 2-D grid: `'placeholder'` draws an empty panel, `'skip'` and `'hide'` leave\nthem out. Default: `'placeholder'`.",
     "default": "placeholder"
    },
    "data": {
     "type": "array",
     "items": {},
     "description": "Tidy rows to facet instead of `series`; `x`, `y` and `seriesBy` name their fields."
    },
    "x": {
     "type": "string",
     "description": "Field of `data` with the x value. Default: `'x'`.",
     "default": "x"
    },
    "y": {
     "type": "string",
     "description": "Field of `data` with the y value. Default: `'y'`.",
     "default": "y"
    },
    "seriesBy": {
     "type": "string",
     "description": "Field of `data` that names the series within a panel."
    },
    "columns": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "number"
      }
     ],
     "description": "Number of panel columns; `'auto'` fits as many as `minPanelWidth` allows. Default: `'auto'`.",
     "default": "auto"
    },
    "minPanelWidth": {
     "type": "number",
     "description": "Smallest panel width in pixels for `columns: 'auto'`. Default: `220`.",
     "default": 220
    },
    "gap": {
     "type": "number",
     "description": "Space between panels in pixels. Default: `12`.",
     "default": 12
    },
    "aspectRatio": {
     "type": "number",
     "description": "Panel width divided by height, used when `panelHeight` is not set. Default: `1.6`.",
     "default": 1.6
    },
    "panelHeight": {
     "type": "number",
     "description": "Fixed panel height in pixels; not set derives it from `aspectRatio`."
    },
    "minPanelHeight": {
     "type": "number",
     "description": "Smallest panel height in pixels. Default: `80`.",
     "default": 80
    },
    "order": {
     "anyOf": [
      {
       "type": "string",
       "enum": [
        "first-seen",
        "asc",
        "desc"
       ]
      },
      {
       "type": "array",
       "items": {}
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "Panel order: `'first-seen'`, `'asc'`, `'desc'`, an array of keys or a comparator. Default:\n`'first-seen'`.",
     "default": "first-seen"
    },
    "limit": {
     "type": "number",
     "description": "Draws only the first N panels and warns; not set draws all."
    },
    "virtualize": {
     "anyOf": [
      {
       "const": "auto"
      },
      {
       "type": "boolean"
      }
     ],
     "description": "Renders only panels near the viewport; `'auto'` turns it on above 64 panels. Default: `'auto'`.",
     "default": "auto"
    },
    "scales": {
     "type": "object",
     "properties": {
      "x": {
       "type": "string",
       "description": "`'shared'` or `'independent'` x axis per panel. Default: `'shared'`.",
       "default": "shared"
      },
      "y": {
       "type": "string",
       "description": "`'shared'`, `'independent'`, `'independent-row'` or `'independent-column'` y axis. Default: `'shared'`.",
       "default": "shared"
      },
      "color": {
       "type": "string",
       "description": "Colour scale; always shared (other values warn and fall back). Default: `'shared'`.",
       "default": "shared"
      },
      "size": {
       "type": "string",
       "description": "Size scale; always shared (other values warn and fall back). Default: `'shared'`.",
       "default": "shared"
      }
     },
     "additionalProperties": false,
     "description": "Which scales the panels share."
    },
    "header": {
     "type": "object",
     "properties": {
      "show": {
       "type": "boolean",
       "description": "Draws a header with the facet value above each panel. Default: `true`.",
       "default": true
      },
      "formatter": {
       "x-wcc-type": "function",
       "description": "Returns the header text from the facet key and `{ dimension, index, count }`."
      },
      "style": {
       "type": "object",
       "properties": {
        "fontSize": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Font size of the headers."
        },
        "fontWeight": {
         "anyOf": [
          {
           "type": "string"
          },
          {
           "type": "number"
          }
         ],
         "description": "Font weight of the headers."
        },
        "color": {
         "type": "string",
         "description": "Text colour of the headers."
        }
       },
       "additionalProperties": false,
       "description": "Text style of the headers; not set uses the theme."
      }
     },
     "additionalProperties": false,
     "description": "Panel headers."
    },
    "axes": {
     "type": "object",
     "properties": {
      "labels": {
       "type": "string",
       "enum": [
        "none",
        "all",
        "edges"
       ],
       "description": "`'edges'` labels y on the first column and x on the bottom panel of each column; `'all'` labels every panel; `'none'` hides them. Default: `'edges'`.",
       "default": "edges"
      }
     },
     "additionalProperties": false,
     "description": "Axis labels across panels."
    },
    "legend": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "string"
      }
     ],
     "description": "`'shared'` draws one legend for all panels; `'none'` hides it. Default: `'shared'`.",
     "default": "shared"
    },
    "toolbar": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "string"
      }
     ],
     "description": "`'shared'` draws one toolbar for all panels; `'none'` hides it. Default: `'shared'`.",
     "default": "shared"
    },
    "wcc": {
     "type": "object",
     "properties": {
      "headerValue": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "last",
          "max",
          "min",
          "total"
         ]
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "Metric shown in each header: `'last'`, `'total'`, `'max'`, `'min'` or a function; not set shows none."
      },
      "sort": {
       "anyOf": [
        {
         "type": "string",
         "enum": [
          "asc",
          "desc"
         ]
        },
        {
         "type": "object",
         "properties": {
          "by": {
           "description": "Metric to sort by (as in `headerValue`)."
          },
          "dir": {
           "type": "string",
           "enum": [
            "asc",
            "desc"
           ],
           "description": "Sort direction. Default: `'desc'`.",
           "default": "desc"
          }
         },
         "required": [
          "by"
         ],
         "additionalProperties": false
        }
       ],
       "description": "Sorts 1-D panels by a metric: `'desc'`, `'asc'` or `{ by, dir }`; the metric is `by`, else `headerValue`, else `'total'`."
      },
      "sparkline": {
       "type": "boolean",
       "description": "Draws the panels as sparklines, at most 96 px high. Default: `false`.",
       "default": false
      },
      "typeMix": {
       "type": "boolean",
       "description": "Allows different cartesian chart types per panel. Default: `false`.",
       "default": false
      },
      "highlight": {
       "type": "boolean",
       "description": "Hovering or focusing a legend item highlights that series in every panel. Default: `true`.",
       "default": true
      }
     },
     "additionalProperties": true,
     "description": "West Coast Charts trellis extensions (sort, headerValue and virtualization need\ntrellis-extras)."
    }
   },
   "additionalProperties": true
  },
  "WccUnitShape": {
   "type": "object",
   "properties": {
    "isUnitShape": {
     "const": true
    },
    "name": {
     "type": "string"
    },
    "kind": {
     "type": "string"
    },
    "category": {
     "type": "string"
    },
    "minUnits": {
     "type": "number"
    },
    "order": {},
    "source": {},
    "rings": {
     "type": "array",
     "items": {}
    },
    "shape": {
     "type": "object",
     "additionalProperties": true,
     "description": "Shape metadata."
    },
    "fill": {
     "x-wcc-type": "function",
     "description": "Places the units inside the outline."
    },
    "with": {
     "x-wcc-type": "function",
     "description": "A variant with other settings."
    },
    "outlined": {
     "x-wcc-type": "function",
     "description": "A hollow variant."
    }
   },
   "required": [
    "isUnitShape"
   ],
   "additionalProperties": true
  },
  "WccVitalsClockOptions": {
   "type": "object",
   "properties": {
    "plugins": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "$ref": "#/$defs/WccPremiumPlugin"
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "$ref": "#/$defs/WccPremiumPlugin"
           }
          ]
         },
         {
          "type": "object",
          "additionalProperties": true
         }
        ],
        "minItems": 1,
        "maxItems": 2
       }
      ]
     },
     "description": "Plugins of this chart: plugin objects, registered names, or `[nameOrPlugin, options]`."
    },
    "time": {
     "type": "object",
     "properties": {
      "start": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "number"
        }
       ]
      },
      "span": {
       "type": "string"
      },
      "step": {
       "type": "string"
      }
     },
     "additionalProperties": false,
     "description": "The window: start (ms or ISO), span ('24h', '12h') and slot length ('60min')."
    },
    "now": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Snapshot cutoff for all measurement channels; future measurements are excluded."
    },
    "followNow": {
     "type": "boolean",
     "description": "Advance now to later appended measurements. Historical arrivals never move it backwards. Default: `false`.",
     "default": false
    },
    "timeZone": {
     "type": "string",
     "description": "IANA zone of the labels. Default: the runtime's zone."
    },
    "params": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/WccVitalsParam"
     },
     "description": "The parameters, outermost ring first."
    },
    "events": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "at": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "kind": {
        "type": "string"
       },
       "label": {
        "type": "string"
       }
      },
      "required": [
       "at"
      ],
      "additionalProperties": false
     },
     "description": "Event markers on the dial, e.g. medication."
    },
    "alarms": {
     "type": "array",
     "items": {
      "type": "object",
      "properties": {
       "from": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "to": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       },
       "label": {
        "type": "string"
       }
      },
      "required": [
       "from"
      ],
      "additionalProperties": false
     },
     "description": "Caller alarm windows (wedges); never computed by the chart."
    },
    "core": {
     "$ref": "#/$defs/RadialColumnLayer",
     "description": "Any radialColumn layer from the caller for the centre, e.g. a 'matrix' of the caller's own scores."
    },
    "demo": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "string"
      }
     ],
     "description": "Marks the chart as demo data (status strip and describe())."
    },
    "radialColumn": {
     "$ref": "#/$defs/RadialColumnOptions",
     "description": "radialColumn options passed through."
    }
   },
   "additionalProperties": false
  },
  "WccVitalsParam": {
   "type": "object",
   "properties": {
    "id": {
     "type": "string",
     "description": "Parameter id."
    },
    "title": {
     "type": "string",
     "description": "Ring title, e.g. 'Herzfrequenz'."
    },
    "short": {
     "type": "string",
     "description": "Short name in the status strip and describe(), e.g. 'HF'."
    },
    "unit": {
     "type": "string",
     "description": "Unit, e.g. '/min', '%', 'mmHg'."
    },
    "kind": {
     "type": "string",
     "enum": [
      "range",
      "columns",
      "trace",
      "cells"
     ],
     "description": "'columns' = the column ring (median per slot), 'cells' = band cells, 'trace' = line at true times, 'range' = high / low pairs."
    },
    "aggregate": {
     "type": "string",
     "enum": [
      "last",
      "max",
      "min",
      "mean",
      "median"
     ],
     "description": "Per-slot aggregation for columns and cells. Default: `'median'`.",
     "default": "median"
    },
    "bands": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RadialVitalsBand"
     },
     "description": "The caller's threshold bands (no built-in clinical thresholds)."
    },
    "data": {
     "type": "array",
     "items": {
      "anyOf": [
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ]
         },
         {
          "type": "number"
         }
        ],
        "minItems": 2,
        "maxItems": 2
       },
       {
        "type": "array",
        "prefixItems": [
         {
          "anyOf": [
           {
            "type": "string"
           },
           {
            "type": "number"
           }
          ]
         },
         {
          "type": "number"
         },
         {
          "type": "number"
         }
        ],
        "minItems": 3,
        "maxItems": 3
       }
      ]
     },
     "description": "Measurements: [time, value] or, for 'range', [time, high, low]; time = ms or ISO."
    },
    "staleAfter": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "After this long the last value is shown as stale: minutes, or a duration such as '4h'."
    },
    "decimals": {
     "type": "number",
     "description": "Decimals at most in labels and tooltips. Default: 1."
    },
    "color": {
     "type": "string",
     "description": "Ring colour; not set uses the palette."
    },
    "gap": {
     "type": "number",
     "description": "'cells' / 'trace' / 'range': radial space to the next layer in pixels. Default: `15`.",
     "default": 15
    },
    "bandsLow": {
     "type": "array",
     "items": {
      "$ref": "#/$defs/RadialVitalsBand"
     },
     "description": "'range': caller-supplied bands for the low value, independent of the high-value bands."
    },
    "bandsLowPolicy": {
     "type": "string",
     "enum": [
      "high-only",
      "shared"
     ],
     "description": "Missing low bands: classify only high (default) or explicitly share high bands. An implicit high-only fallback warns once."
    },
    "gapAfter": {
     "type": "number",
     "description": "'trace' / 'range': a gap longer than this many minutes breaks the line. Default: 3 slots."
    },
    "min": {
     "type": "number",
     "description": "Lower end of the value scale."
    },
    "max": {
     "type": "number",
     "description": "Upper end of the value scale."
    }
   },
   "required": [
    "id",
    "kind",
    "data"
   ],
   "additionalProperties": false
  },
  "WccZoomOptions": {
   "type": "object",
   "properties": {
    "enabled": {
     "type": "boolean",
     "description": "Enables zoom and pan of the view. Default: `true`.",
     "default": true
    },
    "wheel": {
     "anyOf": [
      {
       "type": "boolean"
      },
      {
       "type": "string"
      }
     ],
     "description": "Wheel zoom: `'ctrl'` zooms only while Ctrl or Cmd is held, `true` on every wheel event, `false` never. Default: `'ctrl'`.",
     "default": "ctrl"
    },
    "min": {
     "type": "number",
     "description": "Smallest zoom factor. Default: `0.25` for the network, `0.05` for the tree.",
     "default": 0.25
    },
    "max": {
     "type": "number",
     "description": "Largest zoom factor. Default: `8` for the network, `3` for the tree.",
     "default": 8
    }
   },
   "additionalProperties": false
  },
  "XAxisAnnotations": {
   "type": "object",
   "properties": {
    "scope": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       }
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "trellis: panel key(s) or a function of the key; the annotation is drawn only on matching panels."
    },
    "wcc": {
     "type": "object",
     "properties": {
      "tooltip": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "Tooltip text shown on hover and focus, or a function of the annotation."
      }
     },
     "additionalProperties": false,
     "description": "West Coast Charts: annotation extras."
    },
    "id": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Identifier added as a CSS class to the drawn elements; also the key for removing the annotation\nlater."
    },
    "x": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Position on the x axis: a category, number or timestamp matching `xaxis.type`. Default: `0`.",
     "default": 0
    },
    "x2": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "End of a band: with x2 set the annotation fills the range from x to x2 instead of drawing a\nline. Default: `null`.",
     "default": null
    },
    "strokeDashArray": {
     "type": "number",
     "description": "Dash length of the line; 0 draws it solid. Default: `1`.",
     "default": 1
    },
    "fillColor": {
     "type": "string",
     "description": "Fill colour of the band (used with x2). Default: `'#c2c2c2'`.",
     "default": "#c2c2c2"
    },
    "borderColor": {
     "type": "string",
     "description": "Colour of the line, or the band outline. Default: `'#c2c2c2'`.",
     "default": "#c2c2c2"
    },
    "borderWidth": {
     "type": "number",
     "description": "Line width in pixels. Default: `1`.",
     "default": 1
    },
    "opacity": {
     "type": "number",
     "description": "Opacity of the band fill (0 to 1). Default: `0.3`.",
     "default": 0.3
    },
    "offsetX": {
     "type": "number",
     "description": "Horizontal shift of the line or band in pixels. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Vertical shift of the line or band in pixels. Default: `0`.",
     "default": 0
    },
    "label": {
     "$ref": "#/$defs/AnnotationLabel",
     "description": "Text label attached to the annotation."
    }
   },
   "additionalProperties": false
  },
  "YAxisAnnotations": {
   "type": "object",
   "properties": {
    "scope": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      },
      {
       "type": "array",
       "items": {
        "anyOf": [
         {
          "type": "string"
         },
         {
          "type": "number"
         }
        ]
       }
      },
      {
       "x-wcc-type": "function"
      }
     ],
     "description": "trellis: panel key(s) or a function of the key; the annotation is drawn only on matching panels."
    },
    "wcc": {
     "type": "object",
     "properties": {
      "tooltip": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "x-wcc-type": "function"
        }
       ],
       "description": "Tooltip text shown on hover and focus, or a function of the annotation."
      }
     },
     "additionalProperties": false,
     "description": "West Coast Charts: annotation extras."
    },
    "id": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Identifier added as a CSS class to the drawn elements; also the key for removing the annotation\nlater."
    },
    "y": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Value on the y axis where the line is drawn. Default: `0`.",
     "default": 0
    },
    "y2": {
     "anyOf": [
      {
       "type": "null"
      },
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "End of a band: with y2 set the annotation fills the range from y to y2 instead of drawing a\nline. Default: `null`.",
     "default": null
    },
    "strokeDashArray": {
     "type": "number",
     "description": "Dash length of the line; 0 draws it solid. Default: `1`.",
     "default": 1
    },
    "fillColor": {
     "type": "string",
     "description": "Fill colour of the band (used with y2). Default: `'#c2c2c2'`.",
     "default": "#c2c2c2"
    },
    "borderColor": {
     "type": "string",
     "description": "Colour of the line, or the band outline. Default: `'#c2c2c2'`.",
     "default": "#c2c2c2"
    },
    "borderWidth": {
     "type": "number",
     "description": "Line width in pixels. Default: `1`.",
     "default": 1
    },
    "opacity": {
     "type": "number",
     "description": "Opacity of the band fill (0 to 1). Default: `0.3`.",
     "default": 0.3
    },
    "offsetX": {
     "type": "number",
     "description": "Horizontal shift in pixels; it also extends the line width. Default: `0`.",
     "default": 0
    },
    "offsetY": {
     "type": "number",
     "description": "Vertical shift of the line or band in pixels. Default: `0`.",
     "default": 0
    },
    "width": {
     "anyOf": [
      {
       "type": "string"
      },
      {
       "type": "number"
      }
     ],
     "description": "Length of the line: a percentage of the plot width or a pixel value. Default: `'100%'`.",
     "default": "100%"
    },
    "yAxisIndex": {
     "type": "number",
     "description": "Index of the y axis whose scale positions the annotation. Default: `0`.",
     "default": 0
    },
    "label": {
     "$ref": "#/$defs/AnnotationLabel",
     "description": "Text label attached to the annotation."
    }
   },
   "additionalProperties": false
  }
 }
}
